根据排序的创建日期重命名文件?
我有一个目录,里面充满了随机名称的文件。我希望能够根据时间顺序(即文件创建日期)将它们重命名为“文件 1”“文件 2”等。我可以编写一个简短的 Python 脚本,但那样我就学不到任何东西。我想知道是否有一个聪明的 1 行命令可以解决这个问题。如果有人能指出我正确的方向。
我正在使用 zsh。
谢谢!
I have a directory filled with files with random names. I'd like to be able to rename them 'file 1' 'file 2' etc based on chronological order, ie file creation date. I could be writing a short Python script but then I wouldn't learn anything. I was wondering if there's a clever 1 line command that can solve this. If anyone could point me in the right direction.
I'm using zsh.
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
对于
zsh
:这些通过添加修改来重命名文件date 到原始文件名的开头,保留该文件名是为了防止名称冲突。
由此产生的文件名可能如下所示:
由于使用 null 作为内部字段分隔符 (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(请注意
读取
选项和从零开始的索引而不是从一开始的索引的差异):这些通过添加修改来重命名文件date 到原始文件名的开头,保留该文件名是为了防止名称冲突。
由此产生的文件名可能如下所示:
由于使用 null 作为内部字段分隔符 (IFS),因此应保留带有空格的文件名。
For
zsh
:These rename files by adding the modification date to the beginning of the original filename, which is retained to prevent name collisions.
A filename resulting from this might look like:
Because a null is used as the internal field separator (IFS), filenames with spaces should be preserved.
\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"For Bash (note the differences in the option to
read
and zero-based indexing instead of one-based):These rename files by adding the modification date to the beginning of the original filename, which is retained to prevent name collisions.
A filename resulting from this might look like:
Because a null is used as the internal field separator (IFS), filenames with spaces should be preserved.