【问题标题】:Rename files based on sorted creation date?根据排序的创建日期重命名文件?
【发布时间】:2009-12-15 16:46:03
【问题描述】:

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

我正在使用 zsh。

谢谢!

【问题讨论】:

  • 不想听起来很挑剔,我不相信您可以获得文件创建日期。 ctime 是 inode 更改时间,与您想要的不同。但是,您可以获得修改时间。
  • @Brian Agnew:文件创建日期确实是文件系统的一个特性(尽管在大多数 unix/linux 流行文件系统上确实很少见)。它在大多数基于 xBSD 的系统(包括 Mac OS X)和 Windows 上都有。
  • @ChristopheD - 不知道 MacOS 支持它。我相信 ZFS 也是如此。但它是否表现为 ctime ?

标签: unix shell zsh batch-rename


【解决方案1】:

对于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),因此应保留带空格的文件名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多