端末を使用したファイル名の数の変更

端末を使用したファイル名の数の変更

名前を含むファイルがたくさんあります。ファイル00.txtファイル01.txtなどフォルダ。端末ですべての数字を(4000 + 200 *数字)と同じ場所に変更できますか?最終ファイルの名前を指定したい。ファイル4000.txtファイル4200.txtありがとうございます! !

答え1

インストールしたらzsh...

autoload zmv
zmv -n '(file)(<->)(.txt)' '$1$((4000+$2*200))$3'

-n結果が満足であれば削除してください。

答え2

私は通常renameこれを悪用するために使用しますperlre

$ rename -v 's/^(file)(\d+)(\.txt)$/$1 . (4000+200*$2) . $3/e' *.txt
file00.txt renamed as file4000.txt
file01.txt renamed as file4200.txt

あるいは、Glenn Jackmanがコメントで提案したように。

$ rename -v 's/(\d+)/4000 + 200*$1/e' file*.txt

説明する:

ここではs/foo/bar/置換foo構文を使用しますbar

fooはい^(file)(\d+)(.txt)。したがって、式はで始まりfoo、1つ以上の数字を含み、.txt拡張子が続くすべてのファイルと一致し、それ以外は何も一致しません。 fileキャプチャグループ 1、キャプチャグループ 2、.txtキャプチャグループ 3 に保存されている数値です。

次にbar新しいファイル名に変更します $1 . (4200 + $2) . $3。 4200を追加してグループ2(番号)をキャプチャして$1接続します$3

接続を実際に評価するには、ein修飾子が必要です。s/foo/bar/e(4000 + 200*$2)

変更内容を印刷するために追加しましたが、テスト時に実際に動作する方法に満足するまで何も変更しないように-v使用したいと思います。-n

コマンドの最後のパラメーターrenameはです*.txt。これは評価するファイルのリストにすぎません。で拡張を確認したので、ここを使用perlreできます。*()と一致しない項目はfoo変更されません。

この答えはfile-renameDebianのパッケージを使用します。名前を変更するupdate-alternativesを提供するために使用されます/usr/bin/rename。このパッケージがインストールされていない場合は、インストールした可能性がありますrename.ulユーティリティLinuxrename.ul他の表現システムを使用し、ここで説明するシステムでは機能しません。

答え3

名前を変更したくない場合みんなファイル名と名前を変更したい場合一部内のファイル数特定の範囲、修正されたバージョンのソリューションこの回答到着端末を使用して連続した名前のファイルの名前を別のシーケンスに変更するにはどうすればよいですか?ある程度役に立つかもしれません。

たとえば、 to to tofile05.txtに名前を変更するには、次のようにします。file11.txtfile5000.txtfile7200.txt

for index in {05..11}; do echo mv file"${index}".txt file"$((4000+index*200))".txt; done

echoコマンドが期待どおりに機能するかどうかをテストするだけです。echo出力が正しく表示されたら削除します。

単位番号注釈(番号<10)

file01.txtto範囲内のファイルの場合は、file09.txt範囲0内の単一の数字の前に追加する必要があります。したがって、代わりに

for index in {5..11};

放しますか?

for index in {05..11};

2桁の範囲では、0前の内容は必要ありません。たとえば、13〜25の場合:

for index in {13..25};

関連情報