Você está passando a palavra dirname
como o argumento para --git-dir
.
Com o GNU ou FreeBSD find, a ação -execdir
executa um comando no diretório que contém o arquivo correspondente.
find /c/libs/boost/ -name '.git' -execdir git gc --aggressive \;
Se o seu comando find não tiver -execdir
, você pode passar o diretório .git
como um argumento para --git-dir
.
find /c/libs/boost/ -name '.git' -exec git --git-dir {} gc --aggressive \;
Em geral, se você precisar de expansão de shell, invoque um shell explicitamente, com sh -c 'shell command'
. Não tente executar nenhuma interpolação no comando shell, pois isso falharia com nomes de arquivos contendo caracteres especiais. Passe a (s) correspondência (s) como um argumento para o shell script. Observe que, após sh -c 'shell command'
, o primeiro argumento é $0
e os outros argumentos ( $1
, $2
,…) formam coletivamente "$@"
.
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' _ {} +