Dans cette commande:
find . -name \*.pyc -delete
Pourquoi une barre oblique inverse est-elle nécessaire avant *.pyc
?
Dans cette commande:
find . -name \*.pyc -delete
Pourquoi une barre oblique inverse est-elle nécessaire avant *.pyc
?
Réponses:
Un glob sans guillemets serait développé par le shell avant d' find
être exécuté. (Reportez-vous à Extension de nom de fichier dans le manuel.)
Dire ainsi:
find . -name *.pyc -delete
exécuterait en fait:
find . -name file1.pyc file2.pyc file3.pyc -delete
en supposant qu'il y avait 3 fichiers .pyc dans le répertoire en cours et entraîner une erreur à la place.
Une barre oblique inverse fait passer le shell au glob find
, c'est- à -dire qu'il agit comme s'il *.pyc
était cité.
Idéalement, vous devriez citer un glob:
find . -name '*.pyc' -delete
Avant que votre shell émette la find
commande, il effectuera diverses extensions . Ce faisant, il traite également les caractères spéciaux (ou les caractères ayant une signification particulière), où se *
trouve un caractère générique - un caractère globbing. Il s'agit de ce que l'on appelle l'extension de nom de fichier.
Supposons que vous ayez deux fichiers dans votre répertoire:
foo.pyc
bar.pyc
Ensuite , *.pyc
élargirait aux deux noms. Donc, si vous écrivez:
find . -name *.pyc -delete
alors le shell appellera en fait:
find . -name foo.pyc bar.pyc -delete
ce qui n'a pas beaucoup de sens, car vous ne pouvez avoir qu'un seul argument -name
. C'est pourquoi vous devez échapper le caractère spécial pour l'empêcher d'être interprété par le shell. Pour ce faire, vous devez échapper la barre oblique inversée ou le citer.
find
devrait avoir une section appeléeNON-BUGS
avec quelque chose de similaire comme exemple et une explication de la raison pour laquelle elle est nécessaire.