名前を含むファイルがたくさんあります。ファイル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
。
接続を実際に評価するには、e
in修飾子が必要です。s/foo/bar/e
(4000 + 200*$2)
変更内容を印刷するために追加しましたが、テスト時に実際に動作する方法に満足するまで何も変更しないように-v
使用したいと思います。-n
コマンドの最後のパラメーターrename
はです*.txt
。これは評価するファイルのリストにすぎません。で拡張を確認したので、ここを使用perlre
できます。*
()と一致しない項目はfoo
変更されません。
この答えはfile-rename
Debianのパッケージを使用します。名前を変更するupdate-alternatives
を提供するために使用されます/usr/bin/rename
。このパッケージがインストールされていない場合は、インストールした可能性がありますrename.ul
。ユーティリティLinux。 rename.ul
他の表現システムを使用し、ここで説明するシステムでは機能しません。
答え3
名前を変更したくない場合みんなファイル名と名前を変更したい場合一部内のファイル数特定の範囲、修正されたバージョンのソリューションこの回答到着端末を使用して連続した名前のファイルの名前を別のシーケンスに変更するにはどうすればよいですか?ある程度役に立つかもしれません。
たとえば、 to to tofile05.txt
に名前を変更するには、次のようにします。file11.txt
file5000.txt
file7200.txt
for index in {05..11}; do echo mv file"${index}".txt file"$((4000+index*200))".txt; done
echo
コマンドが期待どおりに機能するかどうかをテストするだけです。echo
出力が正しく表示されたら削除します。
単位番号注釈(番号<10)
file01.txt
to範囲内のファイルの場合は、file09.txt
範囲0
内の単一の数字の前に追加する必要があります。したがって、代わりに
for index in {5..11};
放しますか?
for index in {05..11};
2桁の範囲では、0
前の内容は必要ありません。たとえば、13〜25の場合:
for index in {13..25};