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

このスクリプトは、タスクを実行するために一連の '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"

関連情報