
Creo un nombre de archivo :~
en bash shell por accidente
scp foo :~
¿Cómo eliminarlo?
Respuesta1
intentar rm ':?'
o rm ":?"
orm :\?
Principalmente es necesario citar el nombre del archivo, ya sea con comillas simples o dobles. O escape los caracteres especiales que contenga el nombre del archivo.
Algunos caracteres especiales que puedo contar son:
*
|
$
&
#
<>
;
space/tab/newline
\
brackets/parenthesis/braces
'"`
?
etc
Sugiero utilizar comillas simples para evitar eliminar un archivo con el nombre incorrecto my_file
en lugar de $file
con rm $file
o rm "$file"
cuando file='my_file'
. El carácter de comilla simple es el único carácter que no se puede citar entre comillas simples en shells tipo Bourne, pero siempre se puede citar el resto del nombre del archivo con '...'
y '
mismo como \'
:
rm -- '-$#~<>'\''"*?[]{}'`
Tenga en cuenta que esto -
no es especial para el shell, pero lo es porque, rm
si se encuentra al comienzo de un argumento, se trata como una opción. Aquí --
dice rm
que los argumentos que siguen no deben tratarse como opciones incluso si comienzan con a -
.
Respuesta2
En general, siempre que desee eliminar un archivo con un nombre extraño, puede intentar utilizar el marcador --
que indica el final de las opciones. Todo lo que esté después de esa bandera se maneja como un parámetro posicional. (Ver también:¿Qué significa "--" (doble guión)?)
Entonces, eso sería
rm -i -- :?
(Según lo sugerido por @Doug O'Neal, la -i
opción le avisa antes de eliminar para asegurarse de que está eliminando el archivo correcto).
Sin embargo, en este caso ?
el shell lo expandirá como un carácter global. Entonces lo anterior no funcionará.
En este caso, puede utilizar la función de autocompletar del shell. Vaya al directorio donde está el archivo con un nombre extraño, luego escriba rm :
(sin presionar Enter) y luego presione Tabpara recorrer todos los archivos en el directorio actual. El archivo con un nombre extraño aparecerá entrecomillado correctamente.