如何在 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"

相關內容