使用名称电子表格将许多文件的部分名称更改为唯一名称

使用名称电子表格将许多文件的部分名称更改为唯一名称

我需要一些帮助。我想使用 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 空白_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

首先,创建一个名为 的 csv 文件files-to-rename.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

相关内容