Bash
為每個 git 儲存庫應用特定命令
我想壓縮我電腦上的所有 git 儲存庫(比如在 中
~
)。即,對於每個{}
包含名為 的目錄或文件(如果是子模組)的目錄.git
,我想執行git gc --aggressive --git-dir={}
.我嘗試了以下方法:
/bin/find /c/libs/boost/ -name '.git' -print -exec git --git-dir=dirname {} gc --aggressive \;
但輸出包含很多
fatal: Not a git repository: 'dirname /c/libs/boost/.git'
等。我應該怎麼做才能dirname
正確使用命令?或者別的什麼來達到預期的效果?
您將單詞
dirname
作為參數傳遞給--git-dir
.使用 GNU 或 FreeBSD 查找,該
-execdir
操作在包含匹配文件的目錄中執行命令。find /c/libs/boost/ -name '.git' -execdir git gc --aggressive \;
如果您的 find 命令沒有
-execdir
,您可以將.git
目錄作為參數傳遞給--git-dir
.find /c/libs/boost/ -name '.git' -exec git --git-dir {} gc --aggressive \;
通常,如果您需要 shell 擴展,請顯式呼叫 shell,使用
sh -c 'shell command'
. 不要嘗試在 shell 命令中執行任何插值,因為文件名包含特殊字元會失敗。將匹配項作為參數傳遞給 shell 腳本。請注意,之後sh -c 'shell command'
,第一個參數是$0
,而其他參數 ($1
,$2
, …) 共同形成"$@"
。find /c/libs/boost/ -name '.git' -exec sh -c 'cd "${0%/.}" && git gc --aggressive' {} \; find /c/libs/boost/ -name '.git' -exec sh -c 'for dir; do cd "${dir%/.}" && git gc --aggressive' _ {} +