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

0

Eu tenho que converter um monte de arquivos .ai para .svg, e eu 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] No such file or directory: 'Profile' Traceback (most recent call last): File "ai2svg.py", line 171, in inf = open (sys.argv[1])

Quando o nome do arquivo é "Perfil test.ai". Existe alguma maneira de contornar isso, exceto pela remoção antecipada de todos os espaços em branco dos nomes dos arquivos .ai?

Obrigado.

    
por Misiur 05.09.2014 / 19:25

2 respostas

1

Isso fará isso:

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

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

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

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

for file in *.ai
do
    python ai2svg.py "$file"
done
    
por 05.09.2014 / 19:59
0

O jeito certo de fazer isso é o seguinte:

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

Observe a opção -print0 de find que, junto com -d '' in read , cuida de quaisquer caracteres de espaço em branco nos nomes de arquivos, incluindo novas linhas e guias.

    
por 05.09.2014 / 20:06