重複の可能性:
パターンに従ってLinuxで多くのファイルの名前を変更する
この形式のファイルが複数あります。
file_1.pdf
file_2.pdf
...
file_100.pdf
私の質問は、次のようなすべてのファイルの名前を変更するにはどうすればよいですか。
file_001.pdf
file_002.pdf
...
file_100.pdf
'rename'を使用して複数のファイルの名前を変更できることは知っていますが、この場合の方法がわかりません。
重複の可能性:
パターンに従ってLinuxで多くのファイルの名前を変更する
この形式のファイルが複数あります。
file_1.pdf
file_2.pdf
...
file_100.pdf
私の質問は、次のようなすべてのファイルの名前を変更するにはどうすればよいですか。
file_001.pdf
file_002.pdf
...
file_100.pdf
'rename'を使用して複数のファイルの名前を変更できることは知っていますが、この場合の方法がわかりません。
プロンプト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
$1
perldoc -f sprintf
e
純粋なbashでそれを実行したい場合:
file_*。pdfのfの場合; x = "$ {f ## * _}"; echo mv "$ f" "$ {f%_ *} $(printf'_%03d.pdf'" $ {x%.pdf} ")"; 終わり
(デバッグエコーに注意してください)