2010-02-01 6 views
10

Lorsque vous utilisez la commande find, pourquoi est-ce que les éléments suivants ignorera avec succès les répertoires cachés (ceux commençant par une période) tout en faisant correspondre tout le reste:Ignorer/supprimer les répertoires cachés avec commande GNU find

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

mais cela ne correspondra pas à quoi que ce soit:

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

la seule différence est la marque de question. Cette dernière commande ne devrait-elle pas détecter et exclure les répertoires commençant par un point?

+0

appartient à superuser.com – t0mm13b

+3

@tommie - ça marche? dépend de si elle est utilisée de manière interactive ou dans le cadre d'un script; dans ce dernier cas, il s'agit sans doute d'une question de développement logiciel légitime. –

+0

downvoted pour la non-pertinence du titre mention de "GNU find" dans la réponse sélectionnée. – danorton

Répondre

8

Ce dernier pruneau commande tout parce qu'il émonde . - essayez ces pour voir la différence:

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

Vous voyez que dans le second, . ne sont pas inclus car il est seulement un caractère. Le glob ".?*" inclut uniquement les noms de fichiers d'au moins deux caractères (point, plus un seul caractère, facultatif, plus toute séquence de zéro caractère ou plus). Par ailleurs, find n'est pas une commande Bash. Par contre, find n'est pas une commande Bash.

+0

"trouver n'est pas une commande Bash" - bon appel, changé de titre pour refléter cette – kostmo

2

Cette dernière commande élimine . lui-même - le répertoire que vous utilisez find - ce qui explique pourquoi il ne génère aucun résultat.

+0

pense que vous voulez dire "dernier" – kostmo

Questions connexes