根据排序的创建日期重命名文件?

时间:2009-12-15 16:46:03

标签: unix shell zsh batch-rename

我的目录中填充了随机名称的文件。我希望能够根据时间顺序(即文件创建日期)将它们重命名为“文件1”文件2'等。我可能正在写一个简短的Python脚本,但后来我什么都学不到。我想知道是否有一个聪明的1行命令可以解决这个问题。如果有人能指出我正确的方向。

我正在使用zsh。

谢谢!

1 个答案:

答案 0 :(得分:3)

zsh

saveIFS="$IFS"; IFS=$'\0'; while read -A line; do mv "${line[2]}" "${line[1]%.*}.${line[2]}"; done < <(find -maxdepth 1 -type f -printf "%T+ %f\n"); IFS="$saveIFS"

对于Bash(注意read选项与基于零的索引而不是基于索引的差异):

saveIFS="$IFS"; IFS=$'\0'; while read -a line; do mv "${line[1]}" "${line[0]%.*}.${line[1]}"; done < <(find -maxdepth 1 -type f -printf "%T+\0%f\n"); IFS="$saveIFS"

通过将修改日期添加到原始文件名的开头来重命名文件,这些文件将被保留以防止名称冲突。

由此产生的文件名可能如下所示:

2009-12-15+11:08:52.original.txt

因为null用作内部字段分隔符(IFS),所以应保留带空格的文件名。