2014年11月19日水曜日

【Linux】コマンドでファイル名を連番に変更する.

nautilus を開いて,ファイルを選択して,F2を押して,番号を入力して,Enter.

十数回ならばまだしも数十回,数百回,この作業を続けるのは非現実的なのでコマンドでぱぱっと解決したいと思います.

利用するのは for ループと数値計算,加えてコマンド置換と printf コマンドです.

答えを先に示してしまうとこんな↓感じ

$ j=1
$ for i in *.png
> do
>     mv ${i} $( printf %03d ${j} ).png
>     j=$(( $j + 1 ))
> done


まず,変数 j に 1 を代入し,次に for ループを開始.

変数 i に該当する PNG ファイルを代入したら,mv コマンドでその PNG ファイルのファイル名を j に変更.

その際,コマンド置換と printf の組み合わせで桁合わせ(ここでは三桁表示).

最後に,j を j + 1 に更新して,for ループの始めに戻る.

$ ls

してみると,

001.png 002.png 003.png 004.png 005.png
006.png 007.png 008.png 009.png 010.png
011.png 012.png 013.png 014.png 015.png
・・・
・・・

(中略)

051.png 052.png

みたいな感じになり,無事成功.



例えば,前回のトリミングの話や tar コマンドを組み合わせると,こんなこともできそうです.↓

$ j=1
$ for i in *.png
> do
>     k=02$( printf %03d ${j} ).png
>     convert -crop 1368x1080+213+0 ${i} ${k}
>     tar rvf hoge.tar ${k}
>     rm ${i} 
>     j=$(( $j + 1 ))
> done

それにしても for ループで大量のファイルを扱うときはミスがないかいつもハラハラします.

ヘタすると取り返しの付かない事態になりかねませんからね.

だから,こんな記事書いて忘れないようにしてるんですけど.


0 件のコメント:

コメントを投稿