Tener un archivo llamado ~ (tilde) en mi directorio de inicio


46

Acabo de notar que tengo un archivo llamado ~en mi ~directorio.

$ ls -la ~
...
-rw-r-----  1 x1 x1  733962240 Mar  1 17:55 ~
...

Cualquier idea de lo que pueda mvo rmque?


Intenta eliminarlo por i-node.
— gronostaj

Respuestas:


55

La solución más o menos definitiva cuando se trata de archivos que no se pueden eliminar por medios normales:

ls -il 

La primera columna mostrará el número de inodo de los archivos.

find . -inum [inode-number] -exec rm -i {} \;

Esto eliminará el archivo con el número de inodo especificado después de la verificación.


Esto funcionó. Quizás la solución de rici también es buena, pero no lo intenté. ¡Muchas gracias!
— scrrr

Sí, la respuesta de Rici también es buena. Y creo que es mejor porque es más simple.
— Andrey Regentov

agradable, +1. Cambié su respuesta para usar en -deletelugar de -exec, luego me di cuenta de que estaba usando, lo rm -icual es una buena idea, así que retrocedí. Lo siento.
— terdon

No te preocupes Siempre me alegro cuando alguien considera mis respuestas dignas de su tiempo :)
— Squeezy

Esta respuesta no funcionó para mí. Ubuntu 14.04 LTS
— KhoPhi

46

Debería poder referirse a ese archivo como ~/~(sin comillas) porque tilde-expansion solo aplica tilde ( ~) al comienzo de la palabra.


17
también, yendo a la carpeta y rm ./~, por la misma razón que usted dijo
— Carlos Campderrós

@ CarlosCampderrós considera hacer de eso una respuesta. Lo consideraría como la "mejor" y más sencilla solución, en comparación con otras respuestas, ya que ./~literalmente significa "un archivo o carpeta nombrado ~en el directorio actual" . No hay hacks como caracteres de escape o referencias de inodo.
— ADTC

@ADTC: en defensa de mi respuesta, no requiere cambiar el CWD, mientras que el uso ./~sí. Después de cinco años, mi memoria está un poco borrosa, pero creo que es por eso que sugerí en ~/~lugar de lo más normal ./~: la pregunta se refiere específicamente a "un archivo nombrado ~en el directorio de inicio de [OP] "; no "en el directorio actual".
— rici el

@rici Eso tiene sentido, y en el contexto de la pregunta sería apropiado. Pero me gusta ver respuestas que son generales, o hablar en general primero antes de exponer más sobre el caso específico de la pregunta. Esa es mi defensa: D
— ADTC

20

Cítala ( rm '~') o escapa ( rm \~).


Siempre es uno de esos (también para, por ejemplo $), o agregar --para evitar que el nombre del archivo se interprete como argumento: rm -- -ielimina el archivo nombrado -i; También es útil para rm -- *cuando desea eliminar todos los archivos en el directorio actual: No accidental rm -f *solo porque un archivo se llama así.


Hm, no, eso no parece funcionar ... Probé las comillas simples, el escape y los backticks ... no recoge el archivo. Dice que no existe o interpreta ~ como el directorio de inicio ..
— scrrr

@scrrr ¿Cuál es tu caparazón?
— Daniel Beck

golpetazo. Pero el problema se resolvió de la manera inode.
— scrrr

@scrrr Me alegra que su problema esté resuelto, pero ahora quiero saber por qué bash escapes no funciona de la misma manera en su sistema que en el mío.
— Isaac Rabinovitch

1
Cuidado. --solo detiene la interpretación de los siguientes argumentos como parámetros: no impide que el shell realice su expansión (por ejemplo *), que es lo que está sucediendo aquí. (Sé que lo sugirió como alternativa para otras situaciones, pero una advertencia sería buena).
— Bob
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.