Bash
如何查找不包含最近修改文件的文件夾?
我有一個目錄,其中有大量數據轉儲到其中,我想查找所有最近(例如,過去 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)"