3

重複の可能性:
パターンに従ってLinuxで多くのファイルの名前を変更する

この形式のファイルが複数あります。

file_1.pdf
file_2.pdf
...
file_100.pdf

私の質問は、次のようなすべてのファイルの名前を変更するにはどうすればよいですか。

file_001.pdf
file_002.pdf
...
file_100.pdf

'rename'を使用して複数のファイルの名前を変更できることは知っていますが、この場合の方法がわかりません。

4

2 に答える 2

13

プロンプトrenameからPerlツールを使用してこれを行うことができます。shell(これを実行できる場合とできない場合がある同じ名前の他のツールがあるので、注意してください。)

rename 's/(\d+)/sprintf("%03d", $1)/e' *.pdf

ドライランを実行してファイルを壊さないようにする場合は-n、コマンドにスイッチを追加します。

ノート

次のコマンドを実行した場合(linux

$ file $(readlink -f $(type -p rename))

そしてあなたは次のような結果をもたらします

.../rename: Perl script, ASCII text executable

それならこれは正しいツールのようです=)

これはのデフォルトrenameコマンドのようですUbuntu

これをデフォルトにするにはDebian、次のような派生物を使用しUbuntuます。

sudo update-alternatives --set rename /path/to/rename

説明

  • s///基本置換式です:s/to_replace/replaced/、チェックperldoc perlre
  • (\d+)()少なくとも1つの整数でキャプチャ:\dまたはそれ以上:+in$1
  • sprintf("%03d", $1) sprintfに似ていますが、印刷printfには使用されませんが、同じ構文で文字列をフォーマットするために使用されます。はゼロパディング用で、キャプチャされた文字列です。小切手%03d$1perldoc -f sprintf
  • の最後に修飾子があるため、後のperlの関数が許可されますe
于 2013-01-14T22:07:49.257 に答える
2

純粋なbashでそれを実行したい場合:

file_*。pdfのfの場合; x = "$ {f ## * _}"; echo mv "$ f" "$ {f%_ *} $(printf'_%03d.pdf'" $ {x%.pdf} ")"; 終わり

(デバッグエコーに注意してください)

于 2013-01-15T00:16:11.280 に答える