我想将目录中的文件重命名为顺序数字。根据文件的创建日期。

例如,sadf.jpg到0001.jpg, wrjr3.jpg到0002.jpg等等,前导零的数量取决于文件的总数(如果不需要,不需要额外的零)。


当前回答

find .  | grep 'avi' | nl -nrz -w3 -v1 | while read n f; do mv "$f" "$n.avi"; done

找到。将显示文件夹和子文件夹中的所有文件。

Grep 'avi'将过滤所有avi扩展名的文件。

Nl -nrz -w3 -v1将显示从001 002开始的序列号,后面跟着文件名。

当读n f;做mv "$f" "$ n.v v ";Done会将文件名更改为序列号。

其他回答

与创建日期无关,但根据已排序的名称编号:

python3 -c \
'ext="jpg"
start_num=0
pad=4
import os,glob
files=glob.glob(f"*.{ext}")
files.sort()
renames=list(zip(files,range(start_num,len(files)+start_num)))
for r in renames:
  oname=r[0]
  nname=f"{r[1]:0{pad}}.{ext}"
  print(oname,"->",nname)
  os.rename(oname,nname)
'

用“重命名”命令

rename -N 0001 -X 's/.*/$N/' *.jpg

or

rename -N 0001 's/.*/$N.jpg/' *.jpg

要给一个文件夹中的6000个文件重新编号,您可以使用ACDsee程序的“重命名”选项。

要定义前缀,请使用以下格式:####"*"

然后设置起始号码,按重命名,程序将重命名所有6000个文件的顺序数字。

对我来说,这些答案的组合非常完美:

ls -v | gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }' | bash

ls -v帮助以正确的1 10 9:1 9 10的顺序排序,避免文件名扩展的问题jpg jpg jpeg gawk 'BEGIN{a=1}{printf "mv %s %04d.jpg\n", $0, a++}'以4个字符和前导零重新编号。通过避免mv,我不会意外地试图覆盖已经存在的任何东西,因为意外地有相同的数字。 bash执行

注意@xhienne所说的,将未知内容输送到bash是一种安全风险。但这不是我的情况,因为我使用我的扫描照片。

下面是另一个使用"rename"命令的解决方案:

find -name 'access.log.*.gz' | sort -Vr | rename 's/(\d+)/$1+1/ge'