英数字のファイル名の変更

英数字のファイル名の変更

私のディレクトリには次のファイルがあります。

 GE.AARS_vs_Control16.txt
 GE.DHX30_vs_Control18.txt
 GE.DNAJC2_vs_Control18.txt

ファイル名を次のように変更して削除し、*_Control<numeric>置き換えたいと思います。*_Others

 GE.AARS_vs_Others.txt
 GE.DHX30_vs_Others.txt
 GE.DNAJC2_vs_Others.txt

答え1

for file in /dir/*.txt; do
    mv "$file" "${file%_*}_Others.txt"
done

これは、最後のパラメータからすべて${file%_*}を削除するシェルパラメータ拡張の一形態です。_

答え2

Perlrenameツールを使用して名前を変更したいファイルと同じディレクトリにあるとします。

rename 's/_Control1[68]/_Others/' GE.*_Control1[68].txt

答え3

少し難読化が好きなら、次のような別のアプローチがあります。

paste <(ls) <(ls | sed 's/_Control1[68]/Others') | sed 's/^/mv /' | bash

まず、bashなしでパイプラインを実行してみてください。 :-) ディレクトリに他のファイルがないとします。その場合は、それぞれを類似するものに置き換えてlsリストls *Controll1[68].txtを制限します。

「私はプログラムを書くよりもプログラムを書くためのプログラムを書いたいです」 - Richard Sites

(Alan Perlisと誓うことはできますが、Googleはこれに同意しません。)

関連情報