Devo escludere .git
dal mio find
ricerca. Per raggiungere questo obiettivo, sto usando il -path ./.git -prune
interruttore:
$ find . -path ./.git -prune -o ( -type f -o -type l -o -type d ) | grep '.git'
./.git
Tuttavia, anche se questo salta il contenuto della directory .git, elenca la directory stessa. Funziona quando aggiungo -path ./.git -prune -o -print -a
find . -path ./.git -prune -o -print -a ( -type f -o -type l -o -type d ) | grep '.git'
Perché è necessario. Ho pensato che entrambi i comandi avrebbero dovuto avere lo stesso output. La seconda sintassi è piuttosto brutta.
Risposta accettata:
L'man
pagina per find
dà:
-prune True; if the file is a directory, do not descend into it. If
-depth is given, false; no effect. Because -delete implies
-depth, you cannot usefully use -prune and -delete together.
Quindi nel primo esempio non è così che -path ./.git -prune
non è vero e quindi l'azione predefinita (-print
) non verrebbe chiamato, quindi la riga viene stampata.