Passando vários arquivos com espaço em branco para script python

Passando vários arquivos com espaço em branco para script python

Tenho que converter muitos arquivos .ai para .svg e encontrei a ferramenta ai2svg. eu tentei

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

Mas recebo erros como

IOError: [Errno 2] Arquivo ou diretório inexistente: 'Perfil' Traceback (última chamada mais recente): Arquivo "ai2svg.py", linha 171, em inf = open (sys.argv[1])

Quando o nome do arquivo for "Profile test.ai". Existe alguma maneira de contornar isso, exceto remover antecipadamente todos os espaços em branco nos nomes dos arquivos .ai?

Obrigado.

Responder1

Isso fará isso:

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

Se ai2svg.pyfuncionar com vários arquivos (como a maioria das ferramentas *nix), você pode fazer isso para executar o comando o mínimo de vezes:

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

Se você se preocupa apenas com os arquivos no diretório atual, você pode usar o loop padrão para isso:

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

Responder2

A maneira certa de fazer isso é a seguinte:

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

Observe -print0a opção findque, junto com -d ''in, readcuida de quaisquer caracteres de espaço em branco nos nomes de arquivos, incluindo novas linhas e tabulações.

informação relacionada