He intentado
rm -- -
rm "-"
rm "\-"
rm \-
Le dio un tiro a Perl
~$ perl -e '$junk = glob("-"); chomp $junk; print "$junk\n"; `rm $junk`;'
-
rm: cannot remove `-': No such file or directory
...y...
~$ perl -e '$junk = glob("-"); chomp $junk; print "$junk\n"; `mv $junk newfile.garbage`;'
-
mv: cannot stat `-': No such file or directory
Cualquier ayuda sería muy apreciada, amigos sabios.
rm
versión estás usando (rm --version
)?rm -
funciona bien con GNU coreutils 8.5.rm ./-
Respuestas:
Esto solía publicarse en las preguntas frecuentes de Usenet para Unix; veo que está en las preguntas frecuentes de GNU Core Utility . Había al menos cinco métodos diferentes, pero esto funciona bien:
Si un nombre de archivo contiene caracteres que no se pueden escribir, use:
La
-i
bandera solicita confirmación para cada archivo si debe eliminarse o no.fuente
Eliminar un archivo cuyos nombres comienzan con
-
es una pregunta frecuente, pero parece que tienes un problema diferente.De las soluciones que mencionó en la pregunta:
Eso debería funcionar.
Eso no es diferente de
rm -
. El shell elimina las comillas, y elrm
comando solo ve el guión simple como un argumento. Las comillas son útiles para escapar de metacaracteres de shell; el guión es especial pararm
, no para la concha.Las comillas escapan de la barra diagonal inversa, por lo que intenta eliminar un archivo cuyo nombre consta de dos caracteres, una barra diagonal inversa y un guión.
Esto es igual
rm "-"
, equivalente arm -
.De hecho, al menos con la versión de GNU coreutils
rm
, enrm -
realidad elimina (o intenta eliminar) un archivo cuyo nombre consiste solo en un guión. Si su archivo tuviera ese nombre, ya se habría ido. Concluyo que su archivo tiene un nombre que solo parece un guión.debería dar una idea de cómo se llama realmente.
Aquí hay un script de Perl que acabo de crear que le pedirá cada archivo en el directorio actual y le preguntará si desea eliminarlo. Se ofrece sin garantía, pero lo probé brevemente.
EDITAR : Una solución menos elaborada: si el nombre del archivo es solo un carácter,
rm ?
debería eliminarlo (junto con cualquier otro archivo de este tipo).fuente
M-bM-^@M-^S
es una representación de la representación UTF-8 de 3 bytes del carácter "EN DASH" de Unicode, 0x2013. Me pregunto si accidentalmente lo copiaste y lo pegaste desde una página web.rm -i *
que no funcione? Parece que haría lo mismo que el script perl./^y/i
más que eso/y/i
. Después de todo, un usuario ruso podría escribir "Nyet".Si quieres algo más seguro ...
Intente usar una combinación de ls y find (esto funciona para cualquier archivo que tenga permiso para eliminar)
El parámetro '-i' le dará el número de inodo para cada entrada de directorio ls -li
Una vez que tenga el número de inodo ...
fuente
-exec rm -i {}
es-i
solicitar la eliminación. Estoy mirandoman find
y no veo ninguna forma de hacerlo.Darle
rm ./-
una oportunidad.El
-
es un indicador para iniciar un argumento de indicador. Si comienza el argumento con cualquier cosa que no sea a-
, en este caso/
, asumirá que es el nombre del archivo. Que es lo que deseas.Y puesto
file
y./file
son el mismo archivo, que se dirigirá el archivo llamado-
vía./-
.fuente
No es tan geek como la mayoría de las otras respuestas, pero activaría una instancia de
mc
, comandante de medianoche, y simplemente seleccionaría y eliminaría el archivo.fuente
Tratar:
para ver si el nombre del archivo tiene caracteres no imprimibles.
fuente
No es que sea necesario usar perl aquí, pero esto debería funcionar:
o para ver cuál podría ser cualquier error con lo anterior:
fuente
He tenido suerte usando Nautilus de GNOME para eliminar archivos mal nombrados. ¿Estás ejecutando un servidor X? Estoy seguro de que otros navegadores de archivos también funcionarían.
fuente
Si
no funcionó, el nombre del archivo no es "solo un guión". Si ningún otro archivo tiene un guión, puede intentar
fuente
Hasta ahora recibo un "No existe tal archivo o directorio" para cada método publicado hasta ahora:
Parece que tengo la versión rm 7.4. Intentaré actualizar y volver a intentar estas sugerencias. Gracias a todos por ayudar.
fuente
Soy muy aficionado al uso del
dired
modo en emacs para este tipo de cosas: simplemente "abra" el directorio en emacs. Puede seleccionar fácilmente archivos y marcarlos para eliminarlos.Otro cartel sugería usar el comandante de medianoche; esta es más o menos la misma idea, pero si ya eres usuario de emacs quizás sea más conveniente.
fuente
Debería poder
rm -f '-'
trabajar para mí en CygwinPara el caso,
rm -
también parece funcionar en Red Hat.fuente
rm -
A mí también me funciona.