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.
find -name ’*ü*' -print
?Respuestas:
Una solución algo peligrosa es esta, desde la línea de comandos:
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 cortoy 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.
y0
rodean/
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
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).
fuente
find . -type f ! -regex '.*/[ -.0-~]*' -delete
después de verificar previamente sin-delete
eso los archivos correctos coincidían!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
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. 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
find
comando. Sin mencionar la configuración de codificación de la pantalla del Terminal.fuente
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.
fuente