Come posso trovare tutti i file e le directory corrispondenti a un modello, esclusa una directory usando find
?
Supponiamo che io abbia la seguente struttura di file;
come potrei ottenere il seguente output usando find
:
./bar/foo.txt./bar/foobar./bar/foobar/foofoo.txt./foo-exclude-me-not./foo-exclude-me-not/foo.txt
Ho provato a utilizzare entrambi i seguenti comandi:
trovare . -name 'foo-exclude-me' -prune -o -name 'foo*'find . -nome 'pippo*' ! -percorso './foo-exclude-me/*'
ma entrambi restituiscono questo:
./bar/foo.txt
./bar/foobar
./bar/foobar/foofoo.txt
./foo-exclude-me # << this should be excluded
./foo-exclude-me-not
./foo-exclude-me-not/foo.txt
Come posso escludere correttamente il foo-exclude-me
directory?
Risposta accettata:
find . -name 'foo-exclude-me' -prune -o -name 'foo*' -print
Senza -print
, l'azione predefinita implicita si applica a ogni corrispondenza, anche a quelle eliminate. L'esplicito -print
si applica solo alle condizioni specificate, che sono -name 'foo*'
solo nel ramo else di -name 'foo-exclude-me'
.
In generale, usa un esplicito -print
ogni volta che stai facendo qualcosa di più complesso di una congiunzione di predicati.
Il tuo secondo tentativo con ! -path './foo-exclude-me/*'
non ha funzionato perché ./foo-exclude-me
non corrisponde a ./foo-exclude-me/*
(nessun /
finale ). Aggiunta di ! -path ./foo-exclude-me
funzionerebbe.