私は助けが必要です。 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