空白を含む複数のファイルをPythonスクリプトに渡す

空白を含む複数のファイルをPythonスクリプトに渡す

たくさんの.aiファイルを.svgに変換する必要があり、ai2svgツールを見つけました。試してみました

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

しかし、次のようなエラーが発生します

IOError: [Errno 2] そのようなファイルまたはディレクトリはありません: 'Profile' トレースバック (最新の呼び出しが最後): ファイル "ai2svg.py"、行 171、inf = open (sys.argv[1])

ファイル名が「Profile test.ai」の場合、.ai ファイルの名前の空白をすべて事前に削除する以外に、回避策はありますか?

ありがとう。

答え1

こうすればできます:

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

複数のファイルで動作する場合ai2svg.py(ほとんどの *nix ツールのように)、次のようにしてコマンドを最小回数実行できます。

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

現在のディレクトリ内のファイルのみを対象とする場合は、標準のループを使用できます。

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

答え2

正しい方法は次のとおりです。

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

-print0このオプションをinfindと組み合わせると、改行やタブを含むファイル名内の空白文字が処理されることに注意してください。-d ''read

関連情報