Encuentre todos los caracteres de Windows ilegales en una carpeta y subcarpeta

1

Necesito un script de Automator que encuentre todos los archivos con caracteres ilegales de Windows como <>:/\|?* y los reemplace con un guión bajo. El resto del nombre de archivo debe permanecer sin cambios.

Como alternativa, usaría un script de terminal. Sé cómo encontrarlos con find . -name "*[<>:/\|?*]*" , pero no sé cómo cambiar los nombres correctamente.

¿Cómo hago esto?

    
pregunta Sebastian Semmler 05.08.2016 - 12:54

1 respuesta

1

Encontré un bash one-liner que encuentra cada archivo y carpeta con caracteres no válidos en el nombre y cambia el nombre del archivo / carpeta, cambiando cada carácter no válido a un guión:

find . -name "*[<>:\|?*]*" -exec bash -c 'x="{}"; y=$(sed "s/[<>:\|?*]\+/-/g" <<< "$x") && mv -n "$x" "$y" ' \;

Es posible que un archivo tenga un nombre ilegal que se corregiría con el mismo nombre legal que otro archivo con nombre ilegal (Ejemplo: dos archivos con el nombre "fle"). La línea de una línea anterior no cambiará el nombre del segundo (o más) archivo con nombre ilegal que se corregirá con el mismo nombre que el primero. Esto significa que es posible que aún tenga algunos archivos con nombres ilegales después de que se ejecute one-liner. Después de ejecutar este one-liner, ejecute

find . -name "*[<>:\|?*]*"

de nuevo para identificar los archivos con nombres ilegales que aún existen. Una forma de lidiar con esta situación es cambiar el guión en la sustitución sed a otro personaje, por ejemplo. subrayar y ejecutar el one-liner de nuevo.

    
respondido por el Arno Dverjging 05.08.2016 - 16:48

Lea otras preguntas en las etiquetas