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?

scrrr
fuente
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.

Apretujado
fuente
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.

rici
fuente
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í.

Daniel Beck
fuente
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