2010-02-01 9 views
10

Quando si utilizza il comando find, perché è che il seguente ignorerà successo cartelle nascoste (quelli che iniziano con un punto) mentre si abbina tutto il resto:Ignora/prugna nascosto directory con GNU trovano comando

find . -not \(-type d -name ".?*" -prune \)

ma questo non corrisponde a nulla:

find . -not \(-type d -name ".*" -prune \)

l'unica differenza è il punto di domanda. Non dovrebbe anche il secondo comando rilevare ed escludere le directory che iniziano con un punto?

+0

appartiene a superuser.com – t0mm13b

+3

@tommie - lo fa? dipende dal fatto che sia usato in modo interattivo o come parte di una sceneggiatura; in quest'ultimo caso, è discutibilmente una domanda legittima di sviluppo del software. –

+0

downvoted per irrilevanza di titolo menzione di "GNU trovare" nella risposta selezionata. – danorton

risposta

8

Quest'ultimo prugne comando tutto perché pota . - provare questi per vedere la differenza:

$ ls -lad .* 
. 
.. 
.dotdir 
$ ls -lad .?* 
.. 
.dotdir 

Si vede che nel secondo, . non è incluso, perché è solo un carattere a lungo. Il glob ".?*" include solo nomi di file lunghi almeno due caratteri (punto, più qualsiasi singolo carattere, non facoltativo, più qualsiasi sequenza di zero o più caratteri).

A proposito, find non è un comando Bash.

+0

"trova non è un comando di Bash" - buona chiamata, titolo modificato per riflettere questo – kostmo

2

Quest'ultimo comando prugna . stesso - la directory su cui si sta eseguendo find contro - motivo per cui non genera risultati.

+0

pensa che tu intenda "quest'ultimo" – kostmo

Problemi correlati