Find

列出不包含文件的目錄

  • February 13, 2011

我見過與此類似的問題,但找不到與文件直接相關的內容。

有沒有辦法給我一個不包含特定文件的目錄列表?

例子:

/dir1/good
/dir1/stuff
/dir2/junk
/dir2/morejunk
/dir3/good
/dir4/junk

我想執行一個查找命令,我只返回不包含文件“好”(dir2 和 dir4)的目錄名稱。有什麼方法可以使用 find 或其組合來做到這一點?我現在可以做到這一點的唯一方法是對文件“good”執行查找,保存該輸出並使用一些 awk、sort 和 comm -3 命令來獲得我需要的差異。

有沒有更簡單的方法來做到這一點?

您可以使用-exec test ...檢查目錄中是否存在好的文件,例如

find /path/to/search -type d \! -exec test -e '{}/good' \; -print

您可以使用 find 和GNU parallel輕鬆做到這一點:

$ file=foo && find . -type d | parallel -j+0 "[ -f {}/$file ] || echo $file not in {}"

該命令通過將目前目錄下的每個目錄並行輸入來工作。Parallel 然後啟動並行作業以檢查每個目錄中的文件 foo,如果該文件在目錄中不存在,則列印一條消息。

引用自:https://serverfault.com/questions/235025