【问题标题】:change folder modified date based on most recent file modified date in folder根据文件夹中最近的文件修改日期更改文件夹修改日期
【发布时间】:2016-10-21 07:30:07
【问题描述】:

我有许多项目文件夹,尽管没有触及文件夹中的任何内容,但它们都以某种方式将其日期修改设置为当前日期和时间。我正在寻找一种使用批处理小程序或其他实用程序的方法,这些实用程序将允许我在其上放置一个文件夹/文件夹并将其修改日期设置为文件夹中最近修改文件的修改日期。谁能告诉我该怎么做?

以防万一,我使用的是 OS X Mavericks 10.9.5。谢谢!

【问题讨论】:

    标签: file date applescript datemodified


    【解决方案1】:

    如果你启动一个终端,使用stat你可以得到所有文件的修改时间和对应的名字,用冒号分隔如下:

    stat -f "%m:%N" *
    

    样本输出

    1476985161:1.png
    1476985168:2.png
    1476985178:3.png
    1476985188:4.png
    ...
    1476728459:Alpha.png
    1476728459:AlphaEdges.png
    

    您现在可以对其进行排序并取第一行,然后删除时间戳,以便您获得最新文件的名称:

    stat -f "%m:%N" *png | sort -rn | head -1 | cut -f2 -d:
    

    样本输出

    result.png
    

    现在,您可以将它放在一个变量中,并使用touch 设置所有其他文件的修改时间以匹配其修改时间:

    newest=$(stat -f "%m:%N" *png | sort -rn | head -1 | cut -f2 -d:)
    touch -r "$newest" *
    

    因此,如果您希望能够对任何给定的目录名称执行此操作,您可以在您的 HOME 目录中创建一个名为 setMod 的小脚本,如下所示:

    #!/bin/bash
    # Check that exactly one parameter has been specified - the directory
    if [ $# -eq 1 ]; then
       # Go to that directory or give up and die
       cd "$1" || exit 1
       # Get name of newest file
       newest=$(stat -f "%m:%N" * | sort -rn | head -1 | cut -f2 -d:)
       # Set modification times of all other files to match
       touch -r "$newest" *
    fi
    

    然后使那个可执行文件,只需要一次,使用:

    chmod +x $HOME/setMod
    

    现在,您可以像这样设置/tmp/freddyFrog中所有文件的修改时间:

    $HOME/setMod /tmp/freddyFrog
    

    或者,如果您愿意,可以使用 Applescript 调用它:

    do shell script "$HOME/setMod " & nameOfDirectory
    

    nameOfDirectory 需要看起来像 Unix-y(如 /Users/mark/tmp)而不是 Apple-y(如 Macintosh HD:Users:mark:tmp)。

    【讨论】:

    • 谢谢!这真的很接近我需要做的事情。但不是将文件夹中的所有文件更改为文件夹中最新文件的修改日期,我需要更改文件夹本身的修改日期以匹配该文件夹中最新文件的修改日期。这种方法有没有办法做到这一点?我需要文件夹中的其他文件保持不变并坚持其当前修改日期,只需更改文件夹上的修改日期以匹配最近修改文件的日期和时间。
    • 应该可以——把touch -r "$newest" *这一行改成touch -r "$newest" . 所以基本上把星号换成句号吧。
    • 有些不对劲。我尝试编译或保存脚本“预期表达式等,但发现未知令牌”时出现编译错误。当我尝试对其进行 chmod 时,我收到“没有这样的文件或目录”错误,直到我在 chmod 命令中添加了 .scpt 扩展名。但现在它似乎仍然不起作用。另外,我不知道如何将路径中的空格更改为 Unix 格式。所以我的路径是 /Users/MM/Desktop/temp\ US\ tracking 但带有脚本名称的命令和该路径给出了一个命令未找到错误。
    • 你不应该编译脚本setMod - 它是一个bash 脚本并且不需要编译。如果您正在编译其他内容,请单击原始问题下的edit,并显示您正在尝试编译的内容、尝试编译的方式以及发生了什么...
    • 好的。我刚刚尝试编译它,因为在尝试保存“预期表达式等但发现未知令牌”时出现错误。并且 if 语句之后的第一行中的 $ 在 applescript 中突出显示。此外,当在终端中键入 chmod 行以使其成为可执行文件时,我是按 $HOME 所示实际键入它还是将 HOME 替换为我的主目录的用户名?
    猜你喜欢
    • 1970-01-01
    • 2013-01-12
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-07
    • 2011-09-17
    相关资源
    最近更新 更多