web-dev-qa-db-ja.com

Zsh / AWK / ...によるファイル名の番号順を付加する方法は?

注文に番号注文フォーム1-777を追加したいと思います。それをループして、Bashで変数をインクリメントできます。ただし、ZshやAwkでやりたいと思います。次に例を示します。ファイル名

IMG_20161215_081850.jpg
IMG_20161215_081851.jpg
IMG_20161215_090559.jpg
IMG_20161215_090601.jpg
IMG_20161215_091308.jpg

ウォンテッド

1.IMG_20161215_081850.jpg
2.IMG_20161215_081851.jpg
3.IMG_20161215_090559.jpg
4.IMG_20161215_090601.jpg
5.IMG_20161215_091308.jpg

OS:Debian 8.5

ls *.jpg | nl -s.

nlは行番号を追加します。 -s.は、数値とデータ(この場合はファイル名)の間の区切り文字として.を指定します。出力から先頭のスペースを削除する場合は、次を追加できます。

ls *.jpg | nl -s. | sed 's/^ *//'

sedは、行の先頭から0個以上のスペースを削除します。

本当にawkでこれを実行したい場合:

ls *.jpg | awk '{ print NR"."$0 }'

NRは、これまでに解析されたレコードの数を示す内部変数です。

ファイル名を永続的に変更するには、次の手順を実行します(Michael Vehrs)

ls *.jpg | nl -s. | sed 's/ *\([0-9]\+\)\.\(.*\)/\2 \1\.\2/' | xargs -n 2 mv
3
DopeGhoti

Zshでは、 zmv を使用して一括名前変更を実行します。最初にautoload -U zmvを実行し(これを.zshrcに入れます)、次に

i=1
zmv 'IMG_*.jpg' '$((i++)).$f'