La page de manuel de finddevrait avoir une section appelée NON-BUGSavec quelque chose de similaire comme exemple et une explication de la raison pour laquelle elle est nécessaire.
Brian
Réponses:
19
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é.
@RamRachum, mais plus de caractère lors de la frappe.
Paul Draper
1
@PaulDraper Lisable et moins sujet aux erreurs> Plus court d'une seule touche
Poignée de porte
Les guillemets simples sont la voie à suivre. Je n'ai même jamais pensé que vous pouviez utiliser la barre oblique inverse de cette façon ...
Floris
4
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.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.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:
exécuterait en fait:
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:
la source
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:alors le shell appellera en fait:
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.la source