Find

是否可以連結兩個連續的查找命令?

  • August 11, 2022

我想要:

  • 查找所有以大寫字母開頭的目錄
  • 然後,在這些目錄中找到所有名為 ‘.git’ 的目錄

這是為了性能優化。我的解決方案是先將搜尋範圍縮小到特定目錄,然後在其中搜尋。

對於第一個,我有這個想法:

find / -mindepth 1 -maxdepth 1 -name "[[:upper:]]*"

對於第二個,我使用的是:

find / -type d -name ".git" 2>/dev/null

現在我不知道如何將它們連結在一起。我希望第二個find只搜尋第一個的結果find

或者,如果是 XY 問題,請告訴我您提高速度的建議。

我需要找到.git機器上的所有目錄。但是可以保證.git目錄都在以大寫字母開頭的頂級目錄中。

在這裡,你可以用一個find表達式來做,甚至可以避免-mindepth/ -maxdepthGNUisms:

find / ! -path / ! -path '/[[:upper:]]*' -prune -o -name .git -type d -print

更一般地說,您可以將find命令與可移植地連結:

find ... -exec sh -c '
 find "$@" ... -exec ... {\} ...' sh {} +

(這裡展示瞭如何{}為內部(第二個)find 插入 a 以避免它被外部(第一個)find 拾取)。

或者使用最新版本的 GNU find(4.9.0 或更高版本):

find ... -print0 | find -files0-from - ...

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