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

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


当前回答

ls -1tr | rename -vn 's/.*/our $i;if(!$i){$i=1;} sprintf("%04d.jpg", $i++)/e'

重命名-vn -删除n为关闭测试模式

{$i=1;} -控制起始编号

"%04d.jpg" -控制计数零04并设置输出扩展名。jpg

其他回答

尝试使用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将带破折号的文件名解释为选项。

用“重命名”命令

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

or

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

使用sed:

ls -tr | sed "s/(.*)/mv '\1' \=printf('%04s',line('.').jpg)/" > rename.sh
bash rename.sh

通过这种方式,您可以在执行脚本之前检查脚本,以避免出现大错误

我也遇到过类似的问题,并为此编写了一个shell脚本。尽管已经有很多好的答案,我还是决定把它贴出来,因为我觉得它对别人有帮助。请随意改进它!

@Gnutt你想要的行为可以通过输入以下内容来实现:

./numerate.sh -d <path to directory> -o modtime -L 4 -b <startnumber> -r

如果-r选项被省略,扩孔将只模拟(应该有助于测试)。

动作L描述目标数字的长度(将用前导零填充) 也可以使用选项添加前缀/后缀-p <prefix> -s <suffix>。

如果有人想在文件编号之前按数字排序,只需删除-o modtime选项。

在OSX上,从Homebrew安装重命名脚本:

brew install rename

然后你可以非常简单地做到:

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

或者加上一个漂亮的前缀:

rename -e 's/.*/photo-$N.jpg/' *.jpg