日記

日本語の勉強のためのブログ

【WSL】ディレクトリ内のファイル名を最終更新が古い順で連番に変更する

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)とすればよい.