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.