Übergeben mehrerer Dateien mit Leerzeichen an ein Python-Skript

Übergeben mehrerer Dateien mit Leerzeichen an ein Python-Skript

Ich muss viele .ai-Dateien in .svg konvertieren und habe das Tool ai2svg gefunden. Ich habe versucht

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

Aber ich bekomme Fehler wie

IOError: [Errno 2] Keine solche Datei oder kein solches Verzeichnis: 'Profil' Traceback (letzter Aufruf zuletzt): Datei "ai2svg.py", Zeile 171, in inf = offen (sys.argv[1])

Wenn der Dateiname „Profile test.ai“ lautet. Gibt es eine Möglichkeit, dies zu umgehen, außer vorher alle Leerzeichen in den Namen der .ai-Dateien zu entfernen?

Danke schön.

Antwort1

So funktioniert es:

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

Wenn ai2svg.pyes mit mehreren Dateien funktioniert (wie die meisten *nix-Tools), können Sie Folgendes tun, um den Befehl so oft wie möglich auszuführen:

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

Wenn Sie sich nur für die Dateien im aktuellen Verzeichnis interessieren, können Sie hierfür die Standardschleife verwenden:

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

Antwort2

So gehen Sie richtig vor:

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

Beachten Sie -print0die Option, finddie zusammen mit -d ''in readalle Leerzeichen in den Dateinamen berücksichtigt, einschließlich Zeilenumbrüchen und Tabulatoren.

verwandte Informationen