Bash

遞歸搜尋目錄中的文件名,如果找到則停止降序

  • February 3, 2020

我有一個目錄樹,其中包含同名的文件,例如:

a/file
a/...
a/b/file
x/a/file
x/a/...
x/b/file

我正在嘗試使用find(with -execand ) 來獲取遞歸搜尋樹時首先出現的-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

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