私のディレクトリには次のファイルがあります。
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はこれに同意しません。)