フォルダ内のファイルを連番でリネーム
仕事で作業している中で手こずった内容を備忘録としてメモしておきたいと思います。
今回はLinuxOSでフォルダ内のファイルを連番でリネームする方法です。
コマンドの一例はこちら。
$ ls *.png | sort -t - -k 2 -n | awk '{ printf "mv %s %04d.png\n", $0, NR }' | sh
pngファイルをソート後、若い順に0001から連番で番号を振ります。
今後応用できるように各コマンドの意味を残しておきます。
①ls *.png
拡張子pngファイルのみを表示します。jpgだけ抽出したかったらls *.jpg
②sort -t - -k 2 -n
区切り文字'-'で区切り、2番目の項目で数値として昇順に並べ替え
③awk '{ printf "mv %s %04d.png\n", $0, NR}'
awkコマンドは「awk 'パターン {アクション}' ファイル名」で、テキストファイルを
1行ずつ読み、パターンに合致した行に対して、アクションで指定された内容を実行します。
このコマンドは全行に対し、{ printf "mv %s %04d.png\n", $0, NR}を実行します。
$0は②の出力、NRは行番号を示すので、
「mv (元のファイル名) (0パディングした4桁の数字.png)」
を表示します。NRは1から始まるので100番から始めたい場合はNR+99とします。
④sh
③の出力をシェルに渡します。
いろいろなケースにこれを応用して活用していきたいと思います。