名前スプレッドシートを使用して多くのファイルの部分名を一意の名前に変更する

名前スプレッドシートを使用して多くのファイルの部分名を一意の名前に変更する

私は助けが必要です。 bashを使用して、一意のファイル名で多くのファイルの名前を変更したいと思います。元のファイル名の一部を保持したいと思います。

たとえば、

現在のファイル名 新しいファイル名
F1.R23.fastq.gz 10_1.F1.R23.fastq.gz
F2.R7.fastq.gz 空白_3_1.F2.R7.fastq.gz
F32.R3.fastq.gz 63_3.F32.R3.fastq.gz
F5.R7.fastq.gz Blank_3.F5.R7.fastq.gz
F2.R2.fastq.gz N5_1.F2.R2.fastq.gz

私が持っているのは、元の名前を持つ列と名前に追加したいものを持つ列を持つファイルです。このように:

文書 サンプル
F1.R23.fastq.gz 10_1
F2.R7.fastq.gz 空白_3_1
F32.R3.fastq.gz 63_3
F5.R7.fastq.gz スペース_3
F2.R2.fastq.gz N5_1

誰でもこれを行う方法がある場合は非常に感謝します。名前を変更する必要がある何千ものファイルがあり、その一部は名前が複雑で順序がランダムであるため、これを手動で実行することは実際には不可能です。

ありがとうございます!

ベストアンサー1

files-to-rename.csvまず、スプレッドシートをCSV形式に変換するというCSVファイルを作成します。ファイルの内容は次のとおりです。

F1.R23.fastq.gz,10_1
F2.R7.fastq.gz,empty_3_1
F32.R3.fastq.gz,63_3
F5.R7.fastq.gz,Blank_3
F2.R2.fastq.gz,N5_1

次に、このコマンドを実行してファイルと同じディレクトリにあることを確認します。

while IFS=$',\r' read -r source dest ; do
  mv -v "$source" "${dest}.${source}"
done < files-to-rename.csv

csvファイルにDOS行の終わりがある場合、上記の方法は機能しません。このdos2unix files-to-rename.csvコマンドを使用して、ファイルがUNIX行で終わっていることを確認できます。


そうでない場合は、次のようなより安全なコードを使用してください。

while read line; do
  source=$(echo $line | cut -d, -f1)
  dest=$(echo $line | cut -d, -f2)

  mv -v "$source" "${dest}.${source}"
done < files-to-rename.csv

おすすめ記事