it-swarm-es.tech

No se puede eliminar un archivo con un '?' en el nombre del archivo

No se puede eliminar un archivo con un '?' en el nombre del archivo, no se puede eliminar con el mensaje "el archivo no existe".

He intentado a través de la terminal usando

rm -f ./pathtofile\?.mkv

Pero a pesar de que no hay un mensaje de error, el archivo todavía existe. ¿Alguna sugerencia?

2
Noki

El ? es probablemente otro símbolo no ASCII que su programa de terminal no puede mostrar, por lo que muestra ?. Esto se prueba fácilmente: puede ejecutar touch ?.mkv y rm ?.mkv: ambos comandos se ejecutan perfectamente.

Archivos como ese se eliminan fácilmente usando un administrador de archivos GUI.

Alternativamente, puede intentar usar comodines. Si comando:

ls pathtofile\FewLetters*.mkv

enumera un solo archivo que puede ejecutar de forma segura:

rm pathtofile\FewLetters*.mkv`.

Finalmente, puede intentar la forma más difícil pero más segura como se describe en No se pueden eliminar archivos que contengan caracteres especiales en el nombre del archivo como lo señala Android Dev arriba.

2
sмurf

¿El archivo realmente tiene un ? en el nombre del archivo, o es un carácter que no se imprime que ls muestra como ??

$ touch $'a\ab' 'a?b'
$ ls
a?b  a?b

Un archivo tiene un carácter ASCII BELL en el nombre, y el otro tiene un viejo signo de interrogación.

Las versiones más recientes de ls pueden mostrarle caracteres especiales de forma más clara de forma predeterminada:

$ touch $'b\aa'
$ ls
'b'$'\a''a'

ls -q es cómo las versiones anteriores de ls muestran caracteres que no se imprimen de forma predeterminada. Entonces, si solo hace ls en cualquier versión actual de Ubuntu, es probable que vea solo signos de interrogación.

Pruebe, en cambio, uno de:

$ ls -b
a?b  a\ab
$ printf "%q\n" *
a\?b
$'a\ab'

Si el resultado de cualquiera de estos no tiene signos de interrogación, entonces el nombre del archivo no tiene signos de interrogación.

Puede usar la salida de printf para eliminar:

rm a\?b
rm $'a\ab'

O confíe en la finalización de la pestaña:

$ rm a<tab>
a?b   a^Gb 

Si muestra ^G, presione CtrlV entonces CtrlG para entrar O diga bash para recorrer las finalizaciones de pestañas :

$ bind tab:menu-complete
$ rm a<tab>
$ rm a\?b<tab>
$ rm a^Gb

En cualquier caso, usar rm a?b podría funcionar, pero es peligroso. Coincidiría todos los nombres de archivo que comienzan con a, que terminan en b y tienen un carácter en medio:

$ touch acb; printf "%q\n" a?b
a\?b
$'a\ab'
acb

Entonces, si haces rm a?b (o peor, rm a*b), podrías terminar borrando archivos que no tenías intención de hacer.

3
muru

rm -f 'path?.mkv' funciona para mí. Corrígeme si me equivoco, pero ' ' deshabilita la funcionalidad de algunos caracteres especiales como ?. Perdón por el mal formato, acelerar la velocidad tiene que darse prisa.
Espero que ayude, que tengas un buen día =)

2
IcyIcyIce