以数字方式重命名文件(日期/时间顺序)

Kia*_*ian 6 command-line rename batch

我在一个文件夹中有 200 个文件。我按特定顺序下载它们——通常只有几秒钟的间隔。我想在每个文件的开头附加一个数字。

所以,我下载的第一个文件(最老的一个)将需要从改变name.txt001_name.txt

一直到最后一个文件(最近下载的)从 更改name.txt200_name.txt.

我如何使用命令行来做到这一点?

evi*_*oup 17

以下将在包含换行符的文件上中断,但应该在其余时间工作。它将根据文件上次修改的时间而不是实际创建时间对文件进行排序,因为 Ubuntu 不存储文件的创建时间。因此,如果您在下载文件后对其进行了修改,您将无法获得准确的排序。

n=0; ls -tr | while read i; do n=$((n+1)); mv -- "$i" "$(printf '%03d' "$n")"_"$i"; done
Run Code Online (Sandbox Code Playgroud)

ls -tr按修改时间对文件进行排序,最旧的(当您通过管道传输 ls 的输出时,它会自动每行列出一个文件,而不是标准的做事方式——应该注意,这是一种 GNU 主义,如果您必须在另一个具有不同版本的 *nix 上工作ls,情况可能并非如此)。while read i获取该列表并一次检查每个项目,其余部分进行实际重命名。

n=$((n+1))将变量$n加一。如果事先设置,可能会出现问题,因此为了安全起见,您应该在行的开头将其设置为 0。

$(printf '%03d' "$n")打印包含在变量 $n 中的数字,填充为三个零(即 001、002 ... 087 ... 999)。我希望mv命令是相当明显的。