Pasar varios archivos con espacios en blanco al script de Python

Pasar varios archivos con espacios en blanco al script de Python

Tengo que convertir muchos archivos .ai a .svg y encontré la herramienta ai2svg. He intentado

for i in `find ./ -type f -name \*.ai`; do python ai2svg.py "$i"; done

Pero recibo errores como

IOError: [Errno 2] No existe tal archivo o directorio: 'Perfil' Rastreo (última llamada más reciente): Archivo "ai2svg.py", línea 171, en inf = open (sys.argv[1])

Cuando el nombre del archivo es "Profile test.ai". ¿Hay alguna forma de evitarlo, excepto eliminar de antemano todos los espacios en blanco en los nombres de los archivos .ai?

Gracias.

Respuesta1

Esto lo hará:

find . -type f -name \*.ai -exec python ai2svg.py {} \;

Si ai2svg.pyfunciona con varios archivos (como la mayoría de las herramientas *nix), puede hacer esto para ejecutar el comando la cantidad mínima de veces:

find . -type f -name \*.ai -exec python ai2svg.py {} +

Si solo le interesan los archivos en el directorio actual, puede usar el bucle estándar para esto:

for file in *.ai
do
    python ai2svg.py "$file"
done

Respuesta2

La forma correcta de hacerlo es la siguiente:

find . -maxdepth 1 -type f -name '*.ai' -print0 | while read -d '' -r file; do python ai2svg.py "$file"; done

Observe que -print0la opción findjunto con -d ''in readse encarga de los espacios en blanco en los nombres de archivos, incluidas las nuevas líneas y las tabulaciones.

información relacionada