1

bash シェルで一連のファイルの名前を変更する最も簡単な方法は何ですか? *.ext現在のディレクトリ内の各ファイルの名前を*.otherext? 私は、perl または awk を使用するソリューションを受け入れます。純粋な bash である必要はありません。何か案は?

明確にするために、次のことを意味します。

mv a.ext a.otherext
mv b.ext b.otherext
...
etc. for all *.ext
4

3 に答える 3

11

これを行うにはいくつかの方法があります。renamePerlで書かれたプログラムがあります:

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"; }'
于 2013-02-25T05:04:28.487 に答える
2

あなたが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\")]"
于 2013-02-25T05:24:01.667 に答える
0

Python ワンライナー:

python -c "import shutil, glob; [shutil.move(i,i.replace('.txt','.ext')) for i in glob.glob('*.txt')]"

エスケープ文字と置換機能の代わりに ' と " を利用する

于 2014-08-16T11:45:40.523 に答える