重命名文件 Mac 终端命令行以匹配列表

时间:2021-01-22 10:30:41

标签: macos command-line terminal

我有一堆文件名

190307_M05898_0065_000000000-CC66F_1_11570BP0321L01_1.fastq.gz

190307_M05898_0065_000000000-CC66F_1_11570BP0321L01_2.fastq.gz

190307_M05898_0065_000000000-CC66F_1_11570BP0322L01_1.fastq.gz

190307_M05898_0065_000000000-CC66F_1_11570BP0322L01_2.fastq.gz

等等...

它们都与 _1 和 _2 配对,标志着差异。我用粗体突出了每对之间的区别。我制作了一个 .csv,其中一列包含 粗体 ID 和我想用其替换整个字符串的新 ID。

enter image description here

使用命令行如何说“从第 1 列中找到这个特定的字符串并用第 2 列中的新 ID 替换”但也保留特定字符串之后的所有内容(即 _1.fastq.gz 或 _2.fastq.gz )

我想结束:

BK1_1.fastq.gz

BK1_2.fastq.gz

BN46_1.fastq.gz

BN46_2.fastq.gz

编辑:

如果有帮助,我还创建了一个包含完整文件名的 csv,而不仅仅是 ID

enter image description here

1 个答案:

答案 0 :(得分:1)

使用包含完整文件名的文件,您可以执行以下操作:

IFS=",";
while read fil fil1;
do 
   echo "mv -f $fil $fil1";
   # mv -f "$fil" "$fil1"
done < file

将输入字段分隔符设置为“,”(IFS),然后将文件(csv 文件)读入 while 循环,将每个 csv 读取为变量 fil 和 fil1。使用这些变量打印所需的 mv 命令。确认命令看起来如预期后,注释掉实际命令。