Find
查找包含特定文件的排除路徑
我試圖通過排除所有包含
.git
文件的路徑來遞歸地查找文件夾中的所有目錄,同時排除所有 git 子模組。我怎麼能做到?解釋:
.git
文件存在於每個子模組文件夾的根目錄中。這個子模組文件夾可以包含在任何地方。測試案例
$ mkdir Test $ cd Test $ mkdir a $ mkdir b $ mkdir c $ cd a $ mkdir .git $ cd .. $ cd b $ touch .git $ cd .. $ cd c $ mkdir c1 $ mkdir c2 $ cd.. $ find . -type d \( \( ! -name . -exec [ -e {}/.git ] \; -prune \) -o \( \( \ -name .git\ -o -name .vscode\ -o -name node_modules\ -o -name Image\ -o -name Rendered\ -o -name iNotebook\ -o -name GeneratedTest\ -o -name GeneratedOutput\ \) -prune \) -o -print \) | sort
預期成績
. ./a ./c ./c/c1 ./c/c2
find
操作也是測試,因此您可以使用以下命令添加測試-exec
:find . \( -exec [ -f {}/.git ] \; -prune \) -o \( -name .git -prune \) -o -print
這適用於三組操作:
-exec [ -f {}/.git ] \; -prune
修剪包含名為的文件的目錄.git
-name .git -prune
修剪命名的目錄.git
(因此該命令不會在.git
儲存庫的主目錄中搜尋)要僅匹配目錄,請
-type d
在 之前添加find . -type d \( \( -exec [ -f {}/.git ] \; -prune \) -o \( -name .git -prune \) -o -print \)
.
通過更改find
啟動路徑,在除 之外的目錄上執行它時,這也有效:find /some/other/path -type d \( \( -exec [ -f {}/.git ] \; -prune \) -o \( -name .git -prune \) -o -print \)