Bash
遞歸搜尋目錄中的文件名,如果找到則停止降序
我有一個目錄樹,其中包含同名的文件,例如:
a/file a/... a/b/file x/a/file x/a/... x/b/file
我正在嘗試使用
find
(with-exec
and ) 來獲取遞歸搜尋樹時首先出現的-prune
所有路徑。file
我的範例將返回:a/file x/a/file x/b/file
它不會返回
a/b/file
,因為呼叫的文件file
已經在a/
.如何使用 Bash 實現這一目標?
find . -type d -exec sh -c ' f="$1"/file [ -e "$f" ] && { printf "%s\n" "$f"; true; } ' find-sh {} \; -prune
我不是查找文件而是查找目錄並測試
file
每個目錄中是否存在。如果file
存在,則列印它的路徑並-prune
為目錄啟動。筆記:
true``-prune
即使printf
因任何原因失敗,是否也能確保其工作正常。- 在這個解決方案中
find
從不處理任何file
,它處理目錄。如果你想用 做某事file
,你可以從內殼內做,使用$f
.範例:如果我使用
… -prune -print
,該工具將列印相關的目錄路徑名,而不是文件。從內殼中列印file
我使用的路徑。printf