No se puede eliminar el archivo

No puedo borrar el archivo:

sudo rm /usr/local/bin/Katy Perry - Dark Horse (Official) ft. Juicy J-0KSOMA3QBU0.mp4.part 

Está mostrando un error:

 bash: syntax error near unexpected token `(' 

¿Como arreglarlo?

Completar pestaña

Si solo tiene un archivo en /usr/local/bin cuyo nombre comienza con Katy , simplemente escriba

 sudo rm /usr/local/bin/Katy 

sin pulsar Intro todavía. Luego presiona Tab para completar el comando para:

 sudo rm Katy\ Perry\ -\ Dark\ Horse\ \(Official\)\ ft.\ Juicy\ J-0KSOMA3QBU0.mp4.part 

(Y luego presiona Enter para ejecutarlo.)

Esto cita a cada personaje individualmente (como en la respuesta de AliNa ), y lo hace automáticamente para que no se pierda nada.

En la práctica, una gran cantidad de cotizaciones que hacemos en la línea de comando se logra de forma automática con la tabulación.

Tenga en cuenta también que la finalización de la pestaña no se limita a situaciones en las que habría que citar algo. Por ejemplo, un UUID como 8d44cd38-2158-42f4-9af1-94cd3ccbb9a8 no necesita ser citado, pero si es la única posibilidad comenzando con 8 (o con alguna subsecuencia inicial adecuada más larga), completar la pestaña puede ser muy útil para componer un comando que lo contiene.

También puede citar manualmente, en cuyo caso querrá saber acerca de otras formas de citar que \ , para casos como este donde se deben citar muchos caracteres y es fácil cometer errores.

Cotización manual con '

Si desea que una expresión aparezca literalmente, y la expresión no contiene una comilla simple characater ( ' ), un buen hábito es citarla utilizando comillas simples .

 sudo rm ' /usr/local/bin/Katy Perry - Dark Horse (Official) ft. Juicy J-0KSOMA3QBU0.mp4.part ' 

Puedes citar todos los argumentos, o solo una parte de ellos. Por ejemplo, esto funciona también:

 sudo rm /usr/local/bin/' Katy Perry - Dark Horse (Official) ft. Juicy J-0KSOMA3QBU0.mp4.part ' 

O incluso:

 sudo rm /usr/local/bin/Katy'  Perry - Dark Horse (Official) ft. Juicy 'J-0KSOMA3QBU0.mp4.part' 

(He puesto en cursiva las partes de los comandos anteriores que se citan, por lo que se pueden ver los efectos de ' ).

Cuando se cita con ' , solo ' se trata especialmente. Siempre se hace coincidir como una comilla de cierre.

Por el contrario, las citas con comillas dobles, como se recomienda ampliamente (incluso cuando son innecesarias), por lo general funcionarán pero funcionarán de acuerdo con reglas bastante complejas.

Cotización manual con "

Hay tres casos comunes en los que citar con " se usa con preferencia sobre ' .

  1. Por alguna razón, muchas personas prefieren estilísticamente " . Esto no es necesariamente incorrecto o indeseable, pero recomiendo que no se prefiera " menos que esté familiarizado y cómodo con las reglas de qué expansiones de conchas hace y no evita.

  2. Cuando su expresión contiene un carácter de comillas simples ( ' ), esto no puede incluirse entre comillas simples, pero sí puede estar entre comillas dobles. Y me gusta ' , " cita elimina un significado especial de los espacios, tabulaciones, nuevas líneas (saltos de línea), ( y ) , { y } , < y > , ; , & , | , ? , * , ~ Y # . (Y posiblemente otros caracteres, dependiendo de si estoy olvidando algo y de qué opciones de shell están habilitadas.) Por ejemplo:

     du -h "Don't Ask Me Why (Eurythmics, 1989).flac" 

    Por lo tanto, las comillas dobles funcionan bien para el archivo en particular que estaba eliminando, cuyo nombre contenía los caracteres especiales ( , ) y el espacio, y la sugerencia de usarlos en este caso fue útil y perfectamente aceptable.

  3. Sin embargo, a diferencia de ' , la cita con " no elimina el significado especial de $ , ` , \ , y (a menos que la expansión del historial esté desactivada) ! (Nor " , que, como cabría esperar, se interpreta como la comilla de cierre. Por lo general, . )

    " cotización es útil cuando no desea evitar que el shell realice expansiones basadas en el significado de esos caracteres. Por ejemplo, ejecutar f='fee fi fo' seguido de cat "$f fum.txt" imprime el contenido de fee fi fo fum.txt .

    Pero cuando tal comportamiento no se anticipa, puede causar problemas:

     $ du -sh ... $ rm "Stupid Scheme to Make $$$$$$ Quick!!!!.pdf" rm "Stupid Scheme to Make $$$$$$ Quickdu -shdu -sh.pdf" rm: cannot remove 'Stupid Scheme to Make 453745374537 Quickdu -shdu -sh.pdf': No such file or directory 

    Los caracteres que conservan su significado especial dentro de " comillas pueden ser citados precedidos por un \ :

     $ echo "\"Windows uses '\\' as the path separator,\" screeched Multiplatform Owl wisely." "Windows uses '\' as the path separator," screeched Multiplatform Owl wisely. 

    Cuando un no citado precede a un carácter que no necesita más comillas, permanece sin cambios. (Por lo tanto, \\ en el comando anterior podría haber sido simplemente un solo \ .)

    Dentro de dobles comillas, \ antes ! le quita un significado especial (es decir, evita la expansión de la historia). Pero a diferencia de cuando \ cita otros caracteres especiales, ¡a \ antes ! no se elimina. Por lo tanto, \! Se interpreta como un literal \! , mientras que \$ se interpreta como un $ literal y \ antes de que un espacio se interprete como un espacio literal.

Cotización manual con \

\ cita un solo carácter, el carácter que lo sigue inmediatamente. (Excepto, por supuesto, cuando se cita a sí mismo.)

Para la mayoría de los caracteres x , \ x es equivalente a x . \ es especialmente útil cuando el personaje que le sigue tiene un significado especial, elimina el significado especial de ese personaje:

 $ rm -v Stupid\ Scheme\ to\ Make\ \$\$\$\$\$\$\ Quick\!\!\!\!.pdf removed 'Stupid Scheme to Make $$$$$$ Quick!!!!.pdf' 

Cuando \ está encerrado entre comillas dobles ( " ), funciona de manera diferente, como se describe anteriormente. Luego tiene un significado especial solo cuando el siguiente carácter es especial, y de lo contrario se interpreta literalmente.

Escribir comandos manualmente con \ es especialmente útil y apropiado cuando no tiene que usar muchos de ellos, y puede ser algo ineficiente de lo contrario.

Por ejemplo:

 ek@Ilex:~$ pastebinit <<< Hello,\ world! http://paste.ubuntu.com/8390449/ 

(No es necesario citar un solo carácter al final de un argumento.)

Combinando diferentes formas de cotización

Supongamos que no quisiste couldn't wouldn't shouldn't can't won't don't!! para aparecer literalmente. Una forma fácil de lograr esto sería citarlo como:

 "couldn't wouldn't shouldn't can't won't don't"'!!' 

O (ya que \ antes ! Solo falla al eliminarse cuando se cita dos veces):

 "couldn't wouldn't shouldn't can't won't don't"\!\! 

Esto se puede combinar con, y se puede considerar una variación en, citando solo parte de un argumento, como se discutió anteriormente.

Fuentes / Lecturas Adicionales

  • Manual de referencia de Bash (ver esta página para otros formatos)
  • man bash (también conocido como bash (1), la página de manual de bash)

No se permiten espacios en el terminal, porque separan diferentes partes de un comando. Por lo tanto, para los nombres de archivo con espacios debe usar citas, como dijo @Cornelius, o \ justo antes de cada espacio:

 sudo rm /usr/local/bin/Katy\ Perry\ -\ Dark\ Horse\ \(Official\)\ ft.\ Juicy\ J-0KSOMA3QBU0.mp4.part 

Dado que algunos comandos poco comunes no aceptan citas, es mejor que sepas acerca de \ .