如何通过 Zsh/AWK/... 在文件名前添加数字顺序?

如何通过 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

操作系统:Debian 8.5

答案1

通过 zsh,使用zmv执行批量重命名。首先运行autoload -U zmv(将其放入您的.zshrc),然后

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

答案2

ls *.jpg | nl -s.

nl将添加行号;-s.指定 a.作为数字和数据(在本例中为文件名)之间的分隔符。如果要从输出中删除前导空格,可以添加以下内容:

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

sed然后将从行的开头删除零个或多个空格。

如果你真的想这样做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

相关内容