bash シェルで一連のファイルの名前を変更する最も簡単な方法は何ですか? *.ext
現在のディレクトリ内の各ファイルの名前を*.otherext
? 私は、perl または awk を使用するソリューションを受け入れます。純粋な bash である必要はありません。何か案は?
明確にするために、次のことを意味します。
mv a.ext a.otherext
mv b.ext b.otherext
...
etc. for all *.ext
これを行うにはいくつかの方法があります。rename
Perlで書かれたプログラムがあります:
rename 's/\.ext\z/.otherext/' *.ext
しかし、別の(互換性のない)rename
プログラムもあり、これを行う必要があります:
rename .ext .otherext *.ext
と呼ばれるプログラムもありますmmv
:
mmv '*.ext' '#1.otherext'
プレーンな bash を使用:
for i in *.ext; do mv -- "$i" "${i%.ext}.otherext"; done
普通の perl を使う:
perl -we 'for my $old (glob "*.ext") { (my $new = $old) =~ s/\.ext\z/.otherext/; rename $old, $new or warn "$old -> $new: $!\n"; }'
あなたがPythonのバージョンがどのように見えるかを尋ねたので、私は後世のためにそれを追加すると思いました.
#!/usr/bin/python
from glob import glob
from os import rename
for f in glob("*.ext"):
rename(f, f[:-3] + "otherext")
1 行バージョン (見栄えは良くありません):
python -c "import glob,os;[os.rename(f, f[:-3] + \"otherext\") for f in glob.glob(\"*.ext\")]"
Python ワンライナー:
python -c "import shutil, glob; [shutil.move(i,i.replace('.txt','.ext')) for i in glob.glob('*.txt')]"
エスケープ文字と置換機能の代わりに ' と " を利用する