Bash

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

  • December 17, 2016

我有一個目錄,其中有大量數據轉儲到其中,我想查找所有最近(例如,過去 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。我也不想安裝任何不屬於標準命令行實用程序的東西。最合理的方法是什麼?

我相信這會滿足您的需求。它依次查看每個目錄並檢查是否沒有“最近修改”的文件。

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)"

引用自:https://unix.stackexchange.com/questions/186649