Bash: 将文件名重命名为修改日期的unix时间戳

Bash: Rename file name to unix timestamp of modification date

您好,我需要将文件重命名为修改日期的 unix 时间戳,并将其附加为前缀。

换句话说,我需要一个脚本来批量重命名 像

这样的文件

ABC.jpg

XYZ.png

1649493072000 ABC.jpg

1649493072182 XYZ.png

我也喜欢在每一个这样修改的文件前加一个u-

所以我喜欢转

ABC.jpg

XYZ.png

进入

u-1649493072000 ABC.jpg

u-1649493072182 XYZ.png

PS:

所有模组请注意,我的问题与其他已经提出的问题不同,因为我问的是文件的 UNIX 修改时间戳,而不是像 2022-04-09 这样的 ISO 日期。

find . -type f -exec \
sh -c '
for i do
    d=$(dirname "$i")
    [ "$d" = / ] && d=
    n=${i##*/}
    echo mv "$i" "$d/u-$(stat -c %Y "$i") $n"
done' _ {} +
  • 这在当前目录(.)中递归操作。它只针对常规文件(不是目录等)。根据需要修改 -type f 和其他标志。

  • 它只打印 mv 命令,因此您可以查看它们。真正删除 echo 到 运行。

  • 我们使用 find 来列出目标文件,它的 -exec 标志将这个列表传递给 shell 循环,我们可以在其中解析和修改文件名,包括 stat 以获得修改时间。

  • 我不知道你的用例,但更好的解决方案可能是将 find . -type f -printf '%p u-%T@\n' 的输出保存在一个文件中,供以后参考(这会打印文件路径和修改时间在同一行)。另外,也许是快照(如果可能的话)。