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

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


当前回答

以下是对我有效的方法。 我已经使用重命名命令,这样如果任何文件包含空间的名称,那么mv命令不会混淆空间和实际文件。

Here i replaced spaces , ' ' in a file name with '_' for all jpg files
#! /bin/bash
rename 'y/ /_/' *jpg         #replacing spaces with _
let x=0;
for i in *.jpg;do
    let x=(x+1)
    mv $i $x.jpg
done

其他回答

尝试使用loop, let和printf填充:

a=1
for i in *.jpg; do
  new=$(printf "%04d.jpg" "$a") #04 pad to length of 4
  mv -i -- "$i" "$new"
  let a=a+1
done

使用-i标志可以防止自动覆盖现有文件,而使用——可以防止mv将带破折号的文件名解释为选项。

一个非常简单的bash一行代码,它保留了原来的扩展名,增加了前导零,并且也适用于OSX:

num=0; for i in *; do mv "$i" "$(printf '%04d' $num).${i#*.}"; ((num++)); done

简化版http://ubuntuforums.org/showthread.php?t=1355021

我喜欢gauteh的解决方案,因为它简单,但它有一个重要的缺点。当在数千个文件上运行时,您可能会得到“参数列表太长”的消息(更多关于此的信息),其次,脚本可能会变得非常慢。在我的例子中,在大约36.000个文件上运行它,脚本移动了大约。每秒一件!我不太确定为什么会发生这种情况,但我从同事那里得到的规则是“找到的才是朋友”。

find -name '*.jpg' | # find jpegs
gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }' | # build mv command
bash # run that command

为了计算项目和构建命令,使用了gawk。不过,请注意主要的区别。默认情况下,find搜索当前目录及其子目录中的文件,因此,如果需要,请确保仅限制在当前目录上搜索(使用man find查看如何执行)。

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会将文件名更改为序列号。

现在有一个选项后,你选择多个文件重命名(我已经看到在thunar文件管理器)。

选择多个文件 检查选项 选择重命名

在该特定目录下的所有文件都会出现提示符 只要在分类部分检查一下就可以了