¿Cómo se elimina un archivo cuyo nombre de archivo comienza con un guión (guión o menos) -
? Estoy en un servidor OSX remoto y tengo este archivo en mi directorio:
tohru:~ $ ls -l
total 8
-rw-r--r-- 1 me staff 1352 Aug 18 14:33 --help
...
¿Cómo en el mundo puedo eliminar --help
de una CLI? Este problema es algo que encuentro en diferentes formas en ocasiones, estos archivos son fáciles de crear, pero difíciles de eliminar.
He intentado usar la barra invertida
rm \-\-help
He intentado citas
rm "--help"
¿Cómo evito que el carácter menos (guión o guión) se interprete como una opción?
rm --help
realidad explica cómo eliminar nombres de archivos que comienzan con a-
. Buena pregunta, sin embargo.Respuestas:
Use "-" para hacer que rm deje de analizar las opciones de la línea de comandos, como esta:
fuente
rm
comando admiten el--
argumento?--
anterior a GNU (SysIII, 1980) y son estándar / POSIX. Utilidades estándar, excepto por algunas excepciones (comoecho
) entienden--
. YMMV para otros comandos si no usan la API getopt () para analizar las opciones.O puedes hacer
fuente
--
especialmente.-
de los servicios públicos o de textocd
, elfoo=bar
deawk
...rm -- <filename>
no lo hizo.Use
find
para hacerlo:Y este es un buen método porque si tiene más de unos pocos archivos como este que puede eliminar, puede obtener una lista de vista previa de los archivos simplemente ejecutando find sin la
-delete
opción primero, y luego, si la lista de archivos se ve bien, simplemente ejecute de nuevo con-delete
.De hecho, evitar
rm
a favorfind
(especialmente con la vista previa primero) es un buen hábito que lo ayudará a evitar erroresrm *
que inevitablemente lo morderán algún día.Tenga en cuenta, sin embargo, que find se repetirá en todos sus subdirectorios, por lo que es posible que desee ejecutarlo con una restricción de profundidad de subdirectorio como esta:
que limita la búsqueda al directorio actual.
fuente
find
una lista de archivos / directorios para examinar. Por lo tantofind . -name...
.-delete
y-maxdepth
tampoco son opciones estándar.Las respuestas de Vegar Nilsen y edfuh son muy buenas y las soluciones adecuadas para un problema como este.
Quiero agregar una respuesta general a esta pregunta que le permita eliminar cualquier archivo con un nombre de archivo difícil. Primero se obtiene su número de inodo utilizando
ls -i
o de alguna formastat
y luego se elimina el archivo buscando archivos en el directorio actual por número de inodo y ejecutando elrm
comando en el archivo con un número de inodo coincidenteDado que los números de inodo son únicos en cada sistema de archivos, puede eliminar cualquier archivo con esto; Unicode o utilizando caracteres de escape. Es muy molesto escribir, así que recomendaría agregar la línea
en tu
.inputrc
archivo si estás usando bash. Esto le permite recorrer la lista de posibles finalizaciones ( para obtener más información ).fuente
find -name '--help' -delete
rm --help
, que aún no eliminará el archivo. Simplemente userm ./--help
(orm -i *
.find
prefija la ruta del argumento de la línea de comando a todos los archivos, para que se ejecuterm ./--help
yrm ./sub/dirs/--help
. Para arreglar el segundo, uno tendría que agregar-maxdepth 1
, pero todo esto es esencialmente aplicar la solución de @ edfuh de una manera más indirecta y enrevesada, y-delete
es más seguro que de-exec rm
todos modos.{}
y\;
, de lo contrario, no funcionará.-xdev
. Eso no te ayudará a ejecutar esols -i --help
.Una solución brutal:
fuente
Tutorial de Linux para crear un archivo con guiones y espacios, luego eliminarlo.
¡TEN CUIDADO! No ejecute accidentalmente un
rm -rf /
comando de eliminación en cascada o similar.Si el archivo que está intentando quitar incluye asteriscos o barras, no bombee un accidente
.
o/*
o*
o algún otro comodín que podría conectar en cascada eliminar su sistema operativo.Crea un archivo llamado "--yo yo"
Primero, encuéntralo con find:
Asegúrese de que el comando de búsqueda SOLO encuentre el archivo ONE que desea eliminar:
Luego pase la opción -delete para buscar, para eliminarlos:
Aaaannd se ha ido.
fuente
Midnight Commander (
mc
) es el más fácil, solo apúntalo y presiona F8;)fuente
apt-get install mc || yum install mc; mc
varias teclas de flecha y F8rm ./--help
?Aquí hay una solución que había usado antes de encontrar este hilo.
utilizar
vim
para 'editar' directorio:luego (en vim) seleccione su archivo, presione Supr y confirme la eliminación.
cuando hayas terminado, deja vim con
:q
fuente
¿Has intentado agregar el nombre del directorio como prefijo:
El uso del directorio como prefijo del archivo en general ayuda a evitar que la función del analizador interprete incorrectamente el carácter "menos" como una opción de comando.
fuente
Si desea cambiar el nombre del archivo,
-.bar
(mv no funcionará), intente esto:antes de usar el comando:
Debería poder examinar el contenido del archivo original en foo.bar
fuente