シェルコマンドでファイル名一括変換

あるディレクトリ下にファイルが100とか200とかあるいは1000とかあって、全部に連番付きの新しいファイル名にしたいとする。

古典的なやり方でやってみる。

全てのファイルを同じ拡張子に揃える

まず全てのファイルを同じ拡張子に揃えておく。txt とか jpg とか何でも良い。 これは rename コマンドの正規表現を使えば簡単。

rename 's/$/.txt/' ./*

全てのファイルを連番にする

ls と awk をパイプでつなぐ。

まず次のコマンドで試し実行してみる。うまくいけば、mv コマンドで全ファイルの名前連番変換をシェルで順に実行したような表示が出る。

$ ls *.txt | awk '{ printf "mv %s old_doc%03d.txt\n", $0, NR}'

うまくいったらそれを再度シェルに渡して実行。

$ ls *.txt | awk '{ printf "mv %s old_doc%03d.txt\n", $0, NR}' | sh

205個のファイルがあったようだ。

$ ls
old_doc001.txt  old_doc002.txt  old_doc003.txt  old_doc004.txt
....................................................................
old_doc204.txt  old_doc205.txt