【问题标题】:linux-shell: renaming files - add creation date to file namelinux-shell:重命名文件 - 将创建日期添加到文件名
【发布时间】:2022-01-26 10:02:54
【问题描述】:

我想重命名多个文件。这些文件有一个名称,例如send to Burk.pdfsend to Ripley。它们是在不同的日期创建的。

我想重命名所有看起来像这样的文件:

yyyy.mm.dd - original file name

日期应该从创建日期开始。

我找到了如何将文件重命名为创建日期的脚本,但我不知道如何读取和保留原始文件名。

【问题讨论】:

  • command line tool stat 可以以指定格式打印日期,这可以与保存当前文件名的变量结合使用。请edit您的问题并显示一个不完全满足您要求的脚本。
  • @AndresTrujillo edit 您的问题以添加信息。 不要为此目的使用 cmets。你想在 R 中实现它还是作为一个 shell 脚本来实现它?如果您用shell 标记您的问题,您应该查找shell 脚本示例。将搜索功能与“重命名具有创建日期的文件”一起使用会导致例如stackoverflow.com/q/36539559/10622916 在 Linux 上,您通常拥有 GNU stat,它可能无需使用 date 命令即可直接以预期格式打印日期。
  • @Bodo 感谢您的链接。我当然先搜索过,但没有发现任何可行的。很可能我使用了错误的术语。

标签: linux shell script


【解决方案1】:

这是一个将xxx - 附加到特定目录中每个文件前面的示例:

for file in /some/dir/*.pdf
do
    mv "$file" "xxx - $file"
done

因此,如果您知道如何将日期放在xxx 所在的位置,那么您就已经完成了。

要获取文件的日期,您可以使用stat,但 stat 不允许您根据需要格式化日期,因此您需要将日期传递给 date 命令。要获取您想要的数据,调用将是

date -r $( stat -f %W FILE ) +%Y.%m.%d

Stat 将 FILE 的创建日期打印为 UNIX 时间戳,并将其传递给 date 以将其格式化为所需的格式。

所以整个脚本看起来像这样:

for file in /some/dir/*.pdf
do
    prefix=$( date -r $( stat -f %W "$file" ) +%Y.%m.%d )
    mv "$file" "$prefix - $file"
done

见:

【讨论】:

    猜你喜欢
    • 2014-09-28
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 2013-03-06
    • 2022-06-10
    相关资源
    最近更新 更多