Stack Exchangeの別の質問の情報を使用して、csvファイルの情報を使用してファイルの名前を変更できるようにしました。この行により、すべてのファイルの名前を列1の名前から列2の名前に変更できます。
while IFS=, read -r -a arr; do mv "${arr[@]}"; done <$spreadsheet
ただし、一番上の行の情報を比較しようとします。行をスキップできるコードを含めることができるようにしたいと思います。また、上記のコード行がどのように機能するかをよりよく理解することもできます。列に関する情報が含まれていると思いました(AとBなど)。
これを試して:
tail -n +2 $spreadsheet | while IFS=, read -r -a arr; do mv "${arr[@]}"; done
Tailコマンドは、ファイルの最後の行のみを出力します。 "-n +2"を指定すると、ファイルの2行目以降の最後のすべての行が出力されます。
Whileループの詳細。使用可能な新しい行がある限り、whileループはmv
コマンドを実行します。これは、whileループの条件を使用して行われます。
IFS=, read -r -a arr
上記は、1行をarr
という名前の配列に読み込み、フィールド区切り文字(IFS)がコンマです。 -r
オプションはおそらく必要ありません。
次に、mv
コマンドを実行すると、「$ {arr [@]}」がフィールドのリストに変換され、各フィールドは二重引用符で区切られます。あなたの場合、1行に2つのフィールドしかないので、2つのフィールドだけに拡張されます。 「$ {arr [@]}」は、マニュアルで説明されているように、配列のbashで使用される特別な規則です。
Any element of an array may be referenced using ${name[subscript]}. The braces are
required to avoid conflicts with pathname expansion. If subscript is @ or *, the
Word expands to all members of name. These subscripts differ only when the Word
appears within double quotes. If the Word is double-quoted, ${name[*]} expands to
a single Word with the value of each array member separated by the first character
of the IFS special variable, and ${name[@]} expands each element of name to a sepa-
rate Word. When there are no array members, ${name[@]} expands to nothing. If the
double-quoted expansion occurs within a Word, the expansion of the first parameter
is joined with the beginning part of the original Word, and the expansion of the
last parameter is joined with the last part of the original Word. This is analo-
gous to the expansion of the special parameters * and @ (see Special Parameters
above). ${#name[subscript]} expands to the length of ${name[subscript]}. If sub-
script is * or @, the expansion is the number of elements in the array. Referenc-
ing an array variable without a subscript is equivalent to referencing element
zero.