Find
是否可以連結兩個連續的查找命令?
我想要:
- 查找所有以大寫字母開頭的目錄
- 然後,在這些目錄中找到所有名為 ‘.git’ 的目錄
這是為了性能優化。我的解決方案是先將搜尋範圍縮小到特定目錄,然後在其中搜尋。
對於第一個,我有這個想法:
find / -mindepth 1 -maxdepth 1 -name "[[:upper:]]*"
對於第二個,我使用的是:
find / -type d -name ".git" 2>/dev/null
現在我不知道如何將它們連結在一起。我希望第二個
find
只搜尋第一個的結果find
。或者,如果是 XY 問題,請告訴我您提高速度的建議。
我需要找到
.git
機器上的所有目錄。但是可以保證.git
目錄都在以大寫字母開頭的頂級目錄中。
在這裡,你可以用一個
find
表達式來做,甚至可以避免-mindepth
/-maxdepth
GNUisms: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 - ...