¿Cómo elimino todos los archivos de un árbol de directorios donde el nombre del 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 directorios 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, he intentado

find -name *ü*

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

jamón
fuente
¿Intentaste poner el parámetro entre comillas find -name ’*ü*' -print?
nohillside
El buscador y las carpetas inteligentes deberían permitirle seleccionar todos los archivos en una subcarpeta o volumen y desecharlos de manera gráfica con gran facilidad. ¿Hay alguna razón por la que debe usar la terminal para realizar esta operación? (Supongo que si la lista de caracteres se parece más a 10 que a 4, esa sería una razón decente ahora que lo pienso)
bmike
1
@patrix, sí, he intentado usar comillas, esto tampoco coincide con ningún archivo o carpeta. Usar el buscador (@bmike) tampoco coincide con ningún archivo o carpeta. Creo que se debe al hecho de que estoy buscando caracteres especiales, porque cuando busco caracteres normales, los archivos / carpetas coinciden en ambos casos.
Jamón

Respuestas:

1

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

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

Reemplace el solitario .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 enumere los archivos que desea eliminar. La expresión regular (regexp, o regex) aquí coincidirá con cualquier nombre de ruta que termine en una barra inclinada seguida de cualquier combinación de caracteres ASCII imprimibles /, excluyendo , los caracteres de espacio son el primero tal y ~el último, mientras .y 0rodean /en la secuencia ASCII.

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

LC_COLLATE=C find 

Debería eliminar el peligro.

Otra advertencia más: 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 único después del soporte izquierdo es mortal).

Harald Hanche-Olsen
fuente
Muchas gracias @Harald, tu expresión regular funcionó de maravilla. Al final utilicé el siguiente comando: ¡ find . -type f ! -regex '.*/[ -.0-~]*' -deletedespués de verificar previamente sin -deleteeso los archivos correctos coincidían!
Jamón
1

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

Encuentro la solución sugerida arriba un poco confusa. Entonces mi versión del comando find 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 verificar que ninguno de los archivos que necesita están listados en la impresión anterior.

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

ismail
fuente
Gracias por la respuesta @ismail, sin embargo, estos comandos de búsqueda no parecen coincidir con mis archivos por desgracia.
Jamón
¿Comprobó la coherencia del nombre de archivo en Finder y Terminal.app?
ismail
0

Puede intentarlo de otra manera usando 'A Better Finder Rename' ( Enlace ). Tiene el beneficio de un panel de vista previa, ajustes preestablecidos y acciones de varios pasos. Puede usar la prueba gratuita para experimentar.

Captura de pantalla

JC
fuente
Gracias @JC parece un buen programa, ¡pero al final no lo necesité!
Jamón