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 findcommande, 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.pycbar.pycEnsuite , *.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.
finddevrait avoir une section appeléeNON-BUGSavec quelque chose de similaire comme exemple et une explication de la raison pour laquelle elle est nécessaire.