我想将目录中的文件重命名为顺序数字。根据文件的创建日期。
例如,sadf.jpg到0001.jpg, wrjr3.jpg到0002.jpg等等,前导零的数量取决于文件的总数(如果不需要,不需要额外的零)。
我想将目录中的文件重命名为顺序数字。根据文件的创建日期。
例如,sadf.jpg到0001.jpg, wrjr3.jpg到0002.jpg等等,前导零的数量取决于文件的总数(如果不需要,不需要额外的零)。
当前回答
一个非常简单的bash一行代码,它保留了原来的扩展名,增加了前导零,并且也适用于OSX:
num=0; for i in *; do mv "$i" "$(printf '%04d' $num).${i#*.}"; ((num++)); done
简化版http://ubuntuforums.org/showthread.php?t=1355021
其他回答
用“重命名”命令
rename -N 0001 -X 's/.*/$N/' *.jpg
or
rename -N 0001 's/.*/$N.jpg/' *.jpg
Pero的回答把我带到了这里:)
我想相对于时间重命名文件,因为图像查看器没有按时间顺序显示图像。
ls -tr *.jpg | # list jpegs relative to time
gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }' | # build mv command
bash # run that command
让我们假设我们在一个目录中有这些文件,按照创建的顺序列出,第一个是最古老的:
a.jpg
b.JPG
c.jpeg
d.tar.gz
e
然后ls -1cr输出上面的列表。然后你可以使用rename:
ls -1cr | xargs rename -n 's/^[^\.]*(\..*)?$/our $i; sprintf("%03d$1", $i++)/e'
的输出
rename(a.jpg, 000.jpg)
rename(b.JPG, 001.JPG)
rename(c.jpeg, 002.jpeg)
rename(d.tar.gz, 003.tar.gz)
Use of uninitialized value $1 in concatenation (.) or string at (eval 4) line 1.
rename(e, 004)
对于没有扩展名的文件,会显示警告“使用未初始化的值[…]”;你可以忽略它。
从rename命令中删除-n以实际应用重命名。
这个答案的灵感来自于Luke在2014年4月的回答。它忽略了Gnutt的要求,即根据文件总数设置前导零的数量。
使用sed:
ls -tr | sed "s/(.*)/mv '\1' \=printf('%04s',line('.').jpg)/" > rename.sh
bash rename.sh
通过这种方式,您可以在执行脚本之前检查脚本,以避免出现大错误
与创建日期无关,但根据已排序的名称编号:
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)
'