2010-02-01 9 views
10

Al utilizar el comando find, por qué es que la siguiente ignorará éxito directorios ocultos (los que empiezan con un período) mientras que empareja todo lo demás:ignorar/directorios podar oculta con GNU encuentran comando

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

pero esto no coincide con nada en absoluto:

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

la única diferencia es el signo de interrogación. ¿No debería el último comando detectar y excluir directorios que comiencen con un punto?

+0

pertenece a superuser.com – t0mm13b

+3

@tommie - ¿o sí? depende de si se usa de forma interactiva o como parte de un script; en este último caso, podría decirse que es una pregunta legítima de desarrollo de software. –

+0

downvoted por irrelevancia de la mención del título de "GNU encontrar" en la respuesta seleccionada. – danorton

Respuesta

8

Este último comando ciruelas pasas todo porque poda . - tratar estos para ver la diferencia:

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

Usted ve que en el segundo, . no está incluido porque es sólo un carácter de longitud. El globo ".?*" incluye solo nombres de archivo que tienen al menos dos caracteres de longitud (punto, más cualquier carácter individual, de forma no opcional, más cualquier secuencia de cero o más caracteres).

Por cierto, find no es un comando Bash.

+0

"encontrar no es un comando Bash" - buena llamada, cambio de título para reflejar esto – kostmo

2

Este último comando corta . - el directorio en el que está ejecutando find - por lo que no genera ningún resultado.

+0

piensa que quiere decir "último" – kostmo