【问题标题】:Change date modified of multiple folders to match that of their most recently modified file更改多个文件夹的修改日期以匹配其最近修改文件的日期
【发布时间】:2017-07-22 08:53:21
【问题描述】:

我一直在使用以下 shell bin/bash 脚本作为应用程序,我可以在其中放置一个文件夹,它会更新文件夹的修改日期以匹配该文件夹中最近修改的文件。

for f in each "$@"
do
    echo "$f"
done
$HOME/setMod "$@"

这会获取文件夹名称,然后将其传递给我的主文件夹中的这个 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 date of folder to match
   touch -r "$newest" .
fi

但是,如果我一次将多个文件夹放在上面,它将无法正常工作,而且我不知道如何让它同时与多个文件夹一起工作。

此外,我从 Apple 支持了解到,我的许多文件夹不断更新 mod 日期的原因是由于一些与 Time Machine 相关的过程,尽管事实上我已经多年没有碰过其中的一些。如果有人知道防止这种情况发生的方法,或者以某种方式自动定期更新文件夹的修改日期以匹配其中最近修改文件的日期/时间,那我就不必运行此步骤非常定期地手动操作。

【问题讨论】:

    标签: bash shell applescript


    【解决方案1】:

    setMod 脚本当前只接受一个参数。 你可以让它接受许多参数并循环它们, 或者你可以让调用脚本使用循环。

    我选择第二个选项,因为调用者脚本有一些错误和弱点。为了您的目的,这里对其进行了更正和扩展:

    for dir; do
        echo "$dir"
        "$HOME"/setMod "$dir"
    done
    

    或者让setMod接受多个参数:

    #!/bin/bash
    
    setMod() {
       cd "$1" || return 1
       # Get name of newest file
       newest=$(stat -f "%m:%N" * | sort -rn | head -1 | cut -f2 -d:)
       # Set modification date of folder to match
       touch -r "$newest" .
    }
    
    for dir; do
       if [ ! -d "$dir" ]; then
           echo not a directory, skipping: $dir
           continue
       fi
    
       (setMod "$dir")
    done
    

    注意事项:

    • for dir; do 等价于 for dir in "$@"; do
    • (setMod "$dir")周围的括号使其运行在子shell中,这样脚本本身不会改变工作目录,cd操作的效果仅限于(...)内的子shell

    【讨论】:

    • 太棒了!我爱这个社区!这就像一个魅力。谢谢你,先生!
    • 有什么方法可以修改它,使其递归运行,深入到我放在应用程序上的任何文件夹中的最低级别的子文件夹,修复每个文件夹的修改日期,然后一直到顶级文件夹?另外,这个脚本会忽略 .DS_Store 文件吗?这些是操作系统正在更新的文件,并导致文件夹的修改日期也被更新。我希望有一些方法可以简单地防止这种情况发生。再次感谢!
    • 嗨@MaxWell - 在 iCloud 重置我所有的文件夹日期后,我遇到了这个问题。这是一个尽我最大努力的 Python 脚本(忽略 .DS_Store,忽略空文件夹,否则从文件中获取日期,向上传播)。在正常使用的文件夹中,实际上只在创建或删除子文件/文件夹时更改修改日期,所以我尝试了基于 ctime 的一个。但我更喜欢这个时间来满足我的需要。现有文件夹上的 ctime 总是会被认为太旧,因为没有被删除的东西的记录。 gist.github.com/robince/02f7613511b27279f9d661971ff880b7
    猜你喜欢
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 2022-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多