¿Cómo elimino todos los archivos de un árbol de directorios donde el nombre de archivo contiene caracteres especiales como öäüß?

2

Tengo un problema con mi programa de copia de seguridad, lo que significa que necesito eliminar todos los archivos y carpetas en un árbol de directorio específico donde el nombre de archivo contiene caracteres especiales, en mi caso los alemanes como öäüß y sus equivalentes de capital.

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

Por ejemplo, lo he intentado

find -name *ü*

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

    
pregunta Ham 13.02.2012 - 23:47

3 respuestas

1

Una solución un tanto peligrosa es esta, desde la línea de comandos:

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

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

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

y asegúrese de que solo enumera los archivos que desea eliminar. La expresión regular (regexp, o regex) aquí coincidirá con cualquier ruta de acceso que termine en una barra inclinada seguida de cualquier combinación de caracteres ASCII imprimibles, excluyendo / , los caracteres de espacio son los primeros y ~ el último, mientras que . y 0 surround / en la secuencia ASCII.

Una advertencia entre muchas: no estoy seguro de si la configuración regional actual puede cambiar la secuencia de clasificación de los caracteres y, por lo tanto, quizás cambie el significado de la expresión regular. No creo que lo haga, pero si lo hace, ejecuta los comandos como

LC_COLLATE=C find …

debería eliminar el peligro.

Otra advertencia: asegúrese de tener una copia de seguridad antes de intentar esto. No me responsabilizaré por ninguna pérdida de datos si se equivoca. ¡La línea de comando es una gran herramienta para dispararte en el pie! A veces, solo un espacio fuera de lugar puede significar un desastre. (En este caso, por ejemplo, perder el espacio individual después de que el corchete izquierdo es mortal).

    
respondido por el Harald Hanche-Olsen 14.02.2012 - 21:35
1

Parece que su problema está relacionado con la diferencia de visualización de caracteres tanto en el terminal como en el Finder. Yo sugeriría ingresar al directorio donde se encuentra cualquiera de los archivos que desea 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 coincidan después de verificar que ninguno de los archivos que necesita se encuentra en la impresión anterior.

También debe tener en cuenta las diversas configuraciones de entorno LC_ * que están involucradas aquí, según @Harald Hanche-Olsen, y qué tipo de efecto tiene en el comando find . Sin mencionar la configuración de codificación de la pantalla del terminal.

    
respondido por el ismail 15.02.2012 - 05:33
0

Puede intentarlo de otra manera utilizando "Un mejor nombre de buscador" ( Enlace ). Tiene el beneficio de un panel de vista previa, ajustes preestablecidos y acciones de varios pasos. Puedes usar la versión de prueba gratuita para experimentar.

    
respondido por el J.C. 15.02.2012 - 10:01

Lea otras preguntas en las etiquetas