2 votos

¿Cómo borro todos los archivos de un árbol de directorios en el que el nombre del archivo contiene caracteres especiales como öäüß

Tengo un problema con mi programa de copia de seguridad que significa que tengo que borrar todos los archivos y carpetas en un árbol de directorios específico donde el nombre del archivo contiene caracteres especiales, en mi caso los alemanes como öäüß y sus equivalentes en mayúsculas.

Me encantaría hacer esto usando la terminal, pero ninguno de los comandos que he probado ha coincidido con ninguno de los archivos. ¿Alguien puede sugerirme un comando que pueda usar y que coincida con estos archivos?

Por ejemplo, he intentado

find -name *ü*

sin embargo, ninguno de los archivos coinciden. Cualquier ayuda sería apreciada.

1voto

Jax Puntos 23

A algo peligroso La solución es esta, desde la línea de mando:

find . -type f ! -regex '.*/[ -.0-~]*' -exec rm {} +

Reemplaza al solitario . con el nombre del directorio superior si no has cambiado al directorio relevante primero. Para estar seguro, sin embargo, intente primero el comando más corto

find . -type f ! -regex '.*/[ -.0-~]*'

y asegúrate de que sólo se enumeran los archivos que deseas eliminar. La expresión regular (regexp, o regex) aquí coincidirá con cualquier ruta que termine en una barra seguida de cualquier combinación de caracteres ASCII imprimibles, excluyendo / los personajes del espacio son los primeros y ~ el último, mientras que . y 0 rodea / en la secuencia ASCII.

Una advertencia entre muchas otras: No sé con certeza si su ubicación actual podría cambiar la secuencia de caracteres de cotejo, y por lo tanto tal vez cambiar el significado de la regexp. No creo que lo haga, pero si lo hace, ejecutar los comandos como

LC_COLLATE=C find …

debería eliminar el peligro.

Otra advertencia: Por favor, asegúrese de tener una copia de seguridad antes de intentarlo. No asumiré la culpa de ninguna pérdida de datos si se equivoca. ¡La línea de comandos es una gran herramienta para dispararse en el pie! A veces, sólo un espacio equivocado puede significar un desastre. (En este caso, por ejemplo, perder el único espacio después del soporte izquierdo es mortal).

1voto

XTL Puntos 690

Parece que su problema está relacionado con la diferencia de visualización de los caracteres tanto en la terminal como en el Finder. Sugeriría ir al directorio donde reside cualquiera de los archivos que quieras eliminar y emitir un ls para encontrar si el nombre de archivo en el entorno UNIX coincide con el del Finder.

Encuentro la solución sugerida arriba un poco confusa. Así que mi versión del comando de búsqueda tomaría dos pasos:

find . -name "*ü*" -print
Esto imprimiría los archivos que coinciden.

find . -name "*ü*" -delete
Esto eliminaría los archivos que coinciden después de comprobar que ninguno de los archivos que necesitas están listados en la impresión anterior.

También deberías tener en cuenta los diversos ajustes del entorno LC_* que están involucrados aquí, según @Harald Hanche-Olsen, y qué tipo de efecto que tiene en el find comando. Sin mencionar los ajustes de codificación de la pantalla del terminal.

0voto

Sung Puntos 9172

Puedes intentarlo de otra manera usando "Un mejor nombre para el buscador" ( Enlace ). Tiene el beneficio de un panel de vista previa, preajustes y acciones de varios pasos. Puedes usar la prueba gratuita para experimentar.

Screenshot

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X