![用于列出所有顶级目录的脚本或命令,这些目录包含修改文件时间少于 30 天的子目录](https://linux22.com/image/87807/%E7%94%A8%E4%BA%8E%E5%88%97%E5%87%BA%E6%89%80%E6%9C%89%E9%A1%B6%E7%BA%A7%E7%9B%AE%E5%BD%95%E7%9A%84%E8%84%9A%E6%9C%AC%E6%88%96%E5%91%BD%E4%BB%A4%EF%BC%8C%E8%BF%99%E4%BA%9B%E7%9B%AE%E5%BD%95%E5%8C%85%E5%90%AB%E4%BF%AE%E6%94%B9%E6%96%87%E4%BB%B6%E6%97%B6%E9%97%B4%E5%B0%91%E4%BA%8E%2030%20%E5%A4%A9%E7%9A%84%E5%AD%90%E7%9B%AE%E5%BD%95.png)
这是非常独特的一个。
我正在寻找一种方法来列出文件夹中的所有顶级目录,其中包含子目录,其中的新文件或修改文件的创建时间不超过 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
以对结果目录名称进行唯一排序。