根据文件夹中最近的文件修改日期更改文件夹修改日期

时间:2016-10-21 07:30:08

标签: file date applescript datemodified

我有许多项目文件夹,所有项目文件夹都将其日期修改设置为当前日期&时间不知何故,尽管没有触及文件夹中的任何内容。我正在寻找一种方法来使用批量小程序或其他一些实用程序,它允许我删除文件夹/文件夹并将其日期修改设置为文件夹中最近修改过的文件的修改日期。谁能告诉我怎么做到这一点?

如果重要,我会使用OS X Mavericks 10.9.5。谢谢!

1 个答案:

答案 0 :(得分:0)

如果启动终端并使用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 )。