如何在 macOS 中删除多个文件名的文件名的特定部分

如何在 macOS 中删除多个文件名的文件名的特定部分

我将这些文件放在一个目录中。

Mabel-A10_GTAGAGGA_L001_R1_001.fastq.gz
Mabel-A5_GGACTCCT_L001_R1_001.fastq.gz
Mabel-A11_GCTCATGA_L001_R1_001.fastq.gz
Mabel-A6_TAGGCATG_L001_R1_001.fastq.gz

我希望输出看起来像这样。

Mabel-A10_L001_R1_001.fastq.gz
Mabel-A5_L001_R1_001.fastq.gz
Mabel-A11_L001_R1_001.fastq.gz
Mabel-A6_L001_R1_001.fastq.gz

答案1

您可以尝试重命名它们:

for i in *
do
o=$(echo $i|awk -F_ '{print $1,$3,$4,$5}')
mv "$i" "$o"
done

答案2

该脚本将输出 shell 命令,这些命令执行一系列“mv”命令来完成您的任务:

for FILE in *.fastq.gz
do
    L="${FILE%%_*}_"
    R="${FILE#${L}*_}";
    printf 'mv -vi "%s" "%s"\n' "$FILE" "$L$R"
done

运行一次,并检查输出。如果有很多文件,您可能需要使用less来查看命令。

如果一切看起来都不错,请再次运行该命令并将输出通过管道传输到bash.

它的工作原理是将变量 L 设置为文件名中第一个下划线左边的所有内容,加上下划线本身。然后,它通过从文件名前面剥离 L 中的字符串,并进一步剥离到下一个下划线来形成字符串 R。

mv -vi "Mabel-A10_GTAGAGGA_L001_R1_001.fastq.gz" "Mabel-A10_L001_R1_001.fastq.gz"
mv -vi "Mabel-A11_GCTCATGA_L001_R1_001.fastq.gz" "Mabel-A11_L001_R1_001.fastq.gz"
mv -vi "Mabel-A5_GGACTCCT_L001_R1_001.fastq.gz" "Mabel-A5_L001_R1_001.fastq.gz"
mv -vi "Mabel-A6_TAGGCATG_L001_R1_001.fastq.gz" "Mabel-A6_L001_R1_001.fastq.gz"

相关内容