如何查找不包含最近修改的文件的文件夹?

如何查找不包含最近修改的文件的文件夹?

我有一个目录,其中转储了大量数据,并且我想找到其内容最近未修改的所有目录(例如,在过去 5 天内)。我正在尝试编写一个调用来find执行我正在寻找的操作,但我开始怀疑这是否比 find 可以处理的更复杂。这是我尝试过的,但并没有达到我的预期:

find "$DUMP_DIR" -type d -d 2 \
    -execdir bash -c 'find . -mtime -5 >/dev/null 2>&1' \; \
    -prune

目录结构的布局大致如下$DUMP_DIR/category{1,2,3,4,5}/thing*。我想知道thing*最近哪些目录中转储了新数据。天真的解决方案find "$DUMP_DIR" -type d -d 2 -mtime +5将比我想要的更匹配。

我预计该-execdir表达式会找出任何目录是否包含过去五天内修改的内容(如果没有找到任何内容,则返回非零),但我想它并不能完全做到这一点。

我一直坚持在 OS X 上安装 BSD find。我也不想安装任何不属于标准命令行实用程序的东西。做到这一点最合理的方法是什么?

答案1

我相信这会满足您的需要。它依次查看每个目录并检查是否有“最近修改的”文件。

find * -type d |
    while read DIR
    do
        LINES=$(find "$DIR" -maxdepth 1 -type f -mtime -5 -print -quit)
        test -z "$LINES" && echo "$DIR NOT RECENTLY MODIFIED"
    done

如果find ... -maxdepth 1不适合您的情况,请随意将其更改为类似这样的内容

LINES=$(find "$DIR" \( -type d -prune \) -o \( -type f -mtime -5 -print -quit \))

如果您想计算最近修改的项目数(或者如果-quit不可用),这将起作用

LINES=$(find "$DIR" -maxdepth 1 -type f -mtime -5 | wc -l | tr -d' ')
test 0 -eq "$LINES" && echo "$DIR NOT RECENTLY MODIFIED" || echo "$DIR has $LINES recent file(s)"

答案2

如果我正确理解了这个问题,这可以很简单地完成

find . -mtime +5 -exec bash -c 'echo "${0%/*}"' {} \; | sort | uniq

相关内容