• [^] # Re: * est un caractère spécial

    Posté par (site web personnel) . En réponse au message Commande find et déspécialisation. Évalué à 10.

    Le cas de find est particulièrement tordu. En pratique il y a 3 cas :

    find . -name '*.jpg' # ou \*.jpg, ou "*.jpg"
    

    => Trouve tous les fichiers se terminant par .jpg, dans le répertoire courant et ses sous-répertoires. C'est en général ce qu'on veut. Le shell va passer *.jpg sans expansion à find, qui fait le boulot.

    find . -name *.jpg
    

    => Si il existe un fichier terminant par .jpg dans le répertoire courant (disons foo.jpg), alors le shell va faire l'expansion, et la commande réelle sera find . -name foo.jpg, qui va trouver tous les fichiers nommés foo.jpg dans le répertoire courant et ses sous-répertoires. C'est probablement une bêtise.

    => Si il n'existe pas de fichier terminant par .jpg dans le répertoire courant, alors le shell va tenter l'expansion, qui va échouer. La plupart des shells (bash compris) vont laisser *.jpg tel quel, et la commande sera donc bien find . -name *.jpg qui fera ce qu'on attend. C'est un coup de chance, mais c'est probablement une bêtise aussi.