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


你好,我需要将文件重命名为修改日期的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:

对于所有MOD,请注意,我的问题与其他问题不同,因为我问的是文件的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'的输出保存在一个文件中,以供以后参考(这将在同一行打印文件路径和修改时间(。此外,可能还有一个快照(如果可能的话(。

最新更新