1. 目的
ディレクトリ内のファイル(30個ほど)の名前を,最終更新日時が古い順で連番にしたい.
2. 連番を付与するコマンド
ディレクトリ内のjpgファイル名を連番に変更するコマンドなら見つかった.
ls *.jpg | awk '{ printf "mv %s %03d.jpg\n", $0, NR }' | sh
teratail.com
これはlsで表示された順に連番を付与している.そのため,最終更新日時が古い順にファイルを表示できれば,目的が達成できる.
3. 最終更新日時が古い順にファイルを表示する
man ls
でlsのマニュアルを見ると,-t
で最終更新順に並び替えるらしい.
-t sort by modification time, newest first
しかし書かれているように,これでは新しい順に並び替えるだけである.今回は古い順に並べたい.
さらにマニュアルを見ると,逆順にソートしてくれるオプション-r
が見つかった.
-r, --reverse reverse order while sorting
というわけで,ls -t -r
とすれば最終更新日時が古い順にファイルを表示できる.
4. 結論
最終更新日時が古い順で連番に変更
ls -t -r | awk '{ printf "mv %s %03d.jpg\n", $0, NR }' | sh
補足) 最終更新日時が新しい順で連番に変更
ls -t | awk '{ printf "mv %s %03d.jpg\n", $0, NR }' | sh
5. 追記: ある数から始まる連番をつける
たとえば31.jpg, 32.jpg, ...
のように付与したい場合は,以下のようにNR+30
とする.
ls -t -r *.jpg | awk '{ printf "mv %s %03d.jpg\n", $0, NR+30 }' | sh
(試してないのでわからないがおそらく)一般に,i.jpg, i+1.jpg, i+2.jpg, ...
のように付与したければ,NR+(i-1)
とすればよい.