In questo comando:
find . -name \*.pyc -delete
Perché è necessaria una barra rovesciata prima *.pyc
?
In questo comando:
find . -name \*.pyc -delete
Perché è necessaria una barra rovesciata prima *.pyc
?
Risposte:
Un glob non quotato verrebbe espanso dalla shell prima di find
essere eseguito. (Consultare Espansione nome file nel manuale.)
Quindi dicendo:
find . -name *.pyc -delete
eseguirà effettivamente:
find . -name file1.pyc file2.pyc file3.pyc -delete
supponendo che ci fossero 3 file .pyc nella directory corrente e risultasse invece in un errore.
Una barra rovesciata fa passare la shell al glob find
, cioè si comporta come se *.pyc
fosse quotata.
Idealmente, dovresti citare un glob:
find . -name '*.pyc' -delete
Prima che la shell emetta il find
comando, eseguirà varie espansioni . In questo modo, elabora anche caratteri speciali (o, caratteri con un significato speciale), dove *
è un jolly - un personaggio sconvolgente. Questa è la cosiddetta espansione del nome file.
Supponi di avere due file nella tua directory:
foo.pyc
bar.pyc
Quindi *.pyc
si espanderebbe in entrambi i nomi. Quindi se scrivi:
find . -name *.pyc -delete
quindi la shell chiamerà effettivamente:
find . -name foo.pyc bar.pyc -delete
che non ha molto senso, perché puoi avere solo un argomento per -name
. Ecco perché è necessario sfuggire al personaggio speciale per impedire che venga interpretato dalla shell. Lo fai facendo backslash-escape o, in alternativa, citandolo.
find
dovrebbe avere una sezione chiamataNON-BUGS
con qualcosa di simile come esempio e una spiegazione del perché è necessaria.