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'
的输出保存在一个文件中,供以后参考(这会打印文件路径和修改时间在同一行)。另外,也许是快照(如果可能的话)。
您好,我需要将文件重命名为修改日期的 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'
的输出保存在一个文件中,供以后参考(这会打印文件路径和修改时间在同一行)。另外,也许是快照(如果可能的话)。