用于列出所有顶级目录的脚本或命令,这些目录包含修改文件时间少于 30 天的子目录

用于列出所有顶级目录的脚本或命令,这些目录包含修改文件时间少于 30 天的子目录

这是非常独特的一个。

我正在寻找一种方法来列出文件夹中的所有顶级目录,其中包含子目录,其中的新文件或修改文件的创建时间不超过 30 天。

我们使用复制方法将用户文件同步到中央存储库,我正在寻找一种方法来监控哪些用户在上个月内同步了文件。然后我们可以对那些不存在的问题进行故障排除。

我使用了“find . -type d -mtime -30”,但这列出了每个子文件夹,并且输出太大而无法提供简洁的图片。

任何帮助将非常感激。

答案1

我会find依次使用每个目录,并将其通过管道grep -q .检查是否有任何结果,并根据是否有任何结果有条件地打印目录名称:

for d in */; do find "$d" -type f -mtime -30 | grep -q . && printf %s\\n "$d"; done

答案2

这可能效率不高:

find -mindepth 3 -maxdepth 3 -type f -mtime -30 | 
    xargs -n 1 dirname | 
    xargs -n 1 dirname | 
    uniq # (or sort -u, I assume find's output is already sorted)

答案3

find */ -type f -mtime -30 -print0 | 
    sed -z -e  's:/.*$::' | 
    sort -z -u | 
    tr '\000' '\n'

需要 GNUsort和 GNU (NUL 分隔输入)选项sed-z

find列出当前目录的子目录中不到 30 天的所有文件。输出通过管道输入sed以删除第一个之后的所有内容/,然后输入sort以对结果目录名称进行唯一排序。

相关内容