ディレクトリを再帰的に繰り返し処理し、特定の拡張子のすべてのファイルの拡張子を変更したい、たとえば.t1
から.t2
。これを行うためのbashコマンドは何ですか?
名前を変更できる場合は、次を使用します。
find . -name "*.t1" -exec rename 's/\.t1$/.t2/' '{}' \;
名前を変更できない場合は、次を使用します。
find . -name "*.t1" -exec bash -c 'mv "$1" "${1%.t1}".t2' - '{}' \;
bash
のバージョンがglobstar
オプションをサポートしている場合(バージョン4以降):
shopt -s globstar
for f in **/*.t1; do
mv "$f" "${f%.t1}.t2"
done
または、単に mmv
コマンドをインストールして実行することもできます。
mmv '*.t1' '#1.t2'
ここに #1
は最初のグロブ部分、つまり*
in *.t1
。
または、純粋なbashの場合、簡単な方法は次のとおりです。
for f in *.t1; do
mv "$f" "${i%.t1}.t2"
done
(つまり:for
は、ls
やfind
などの外部コマンドの助けを借りずにファイルをリストできます)
HTH
私はbashでこのようにします:
for i in $(ls *.t1);
do
mv "$i" "${i%.t1}.t2"
done
編集:私の間違い:それは再帰的ではありません、ファイル名を再帰的に変更するための私の方法です:
for i in $(find `pwd` -name "*.t1");
do
mv "$i" "${i%.t1}.t2"
done