¿Cómo puedo eliminar un archivo o directorio llamado "\"?

20

Estoy usando la terminal en una máquina Ubuntu y hay un archivo que me gustaría eliminar. El nombre del archivo es \(solo una barra invertida).

Ahora por lo general solo haría

rm filename

Sin embargo, si lo hago rm \, creo que estoy tratando de escribir un comando de varias líneas.

¿Cómo puedo eliminar este archivo? Sé que podría usar el sistema de archivos GUI, pero eso no es muy eficiente.

Entonces, ¿cómo puedo eliminar (en la terminal) un archivo llamado \?

Nosrettap
fuente
1
¿Por qué tienes un archivo llamado así? (¡Ni siquiera me deja ponerlo en un codebloque aquí en este comentario!)
AJMansfield
77
Más divertido es intentar eliminar un archivo llamado <BEL>, también conocido como Ctrl-G si recuerdo correctamente. Cada vez que haces un ls, el teclado te emite un pitido hasta que (a) descubres el archivo invisible ; y (b) determinó cómo eliminar un archivo con solo un carácter no imprimible en su nombre.
Pieter Geerkens
1
Más importante aún, ¿cómo elimina un archivo llamado "/"?
Curt
1
@Curt fsck. Seriamente. Si /existe un archivo llamado , su sistema de archivos está dañado.
zwol
2
Siempre me gustó el archivo llamado *yo mismo ...
RBerteig

Respuestas:

48

Uso rm \\(escapar de la barra invertida con otra barra invertida). Tenga en cuenta que esto también funciona de manera similar, para los directorios nombrados \(usando cualquiera de los dos rmdiro rmcon la -rbandera)

Ejemplo:

> demo mkdir
> cd demo
> toque \\
> ls -l
total 0
-rw ------- 1 usuarios de Hennes 0 29 de julio 20:25 \
> rm \\
> ls -l
total 0
Hennes
fuente
3
O, bajo el mismo principio, rm '\'(pero no rm "\" ).
evilsoup
2
@evilsoup solo para proporcionar una aclaración adicional al respecto, el \ carácter se utiliza como carácter de escape en cadenas delimitadas con comillas dobles. El dicho rm "\"se analizará en una cadena no cerrada, ya que la segunda comilla se usa con un carácter de escape (y, por lo tanto, se analizará como el carácter de comillas dobles en sí, y no como el final de una cadena). Por lo tanto, la terminal esperará hasta que termine la cadena con otra ". El método equivalente para usar comillas dobles aquí sería rm "\\"(que es directamente equivalente a ambos rm '\'y rm \\ , como ya confirmó).
Avance el
15

Una táctica general para eliminar manualmente archivos con caracteres incómodos en sus nombres es

rm -i ./*

Esto le pedirá que elija si desea eliminar o no cada archivo en el directorio.

zwol
fuente
3
O, solo, era un solo personaje. rm -i ./?
Hennes
1
Si. Si puede escribir un globo más específico que ./*, siempre es una buena idea, especialmente cuando hace algo destructivo.
zwol
44
+1 por prefijar su globo con./
evilsoup
12

También puede desvincular haciendo referencia al inodo de un archivo

linus ~/test $ touch \\
linus ~/test $ ls -li
total 0
15204561 -rw-r--r-- 1 pat sudo 0 Jul 29 23:03 \
linus ~/test $ find . -inum 15204561 -exec rm -v {} \;
removed `./\\'
linus ~/test $ ls -li
total 0
linus ~/test $ 
joshbaptiste
fuente
0

Verifique primero el inodo del archivo. ls -li

137791 -rw-rw-r--. 1 svr svr 366 11 de marzo 15:57

el inodo de "\" es "137791 y luego use el comando find para eliminar" \ "con el número de inodo.

encontrar . -inum 137791 -exec rm -i {} \;

rm: eliminar el archivo normal `./ \ '? si

"\" se eliminará entonces.

BALVINDER SINGH
fuente