Quotingproblem mit Leerzeichen im Dateinamen
for FILE in `find "$DIR_TMP" -type f -name "*.txt"`; do Diese Anweisung führt zu Problemen, wenn der Dateiname Leerzeichen enthält. Was mache ich da falsch? Al -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Sam, 03 Mär 2007, Al Bogner schrieb:
for FILE in `find "$DIR_TMP" -type f -name "*.txt"`; do
Diese Anweisung führt zu Problemen, wenn der Dateiname Leerzeichen enthält. Was mache ich da falsch?
for x in ``; do ..; done zu verwenden. Nimm find ... | while IFS= read -r FILE; do ... ; done Das ist halbwegs sicher (öffnet aber ne subshell wg. der Pipe). Alternativ in der bash geht "Process substitution": while read ...; do ... done < (< find ... ) HTH, -dnh -- 115: pure virtual member function nicht kreatibel (Frank Klemm) -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Samstag, 3. März 2007 22:47 schrieb David Haller: Hallo David,
Nimm
find ... | while IFS= read -r FILE; do ... ; done
Vielen Dank, wieder einmal! Es gibt im Netz einiges zu Leerzeichen durch "_" rekursiv ersetzen. Ich bin mir aber unsicher, was da passt. Hast du eine Empfehlung dafür? Sehe ich es falsch, dass man da bei obigem Konstrukt nur mit sed die Leerzeichen ersetzen muss oder ist auch an andere Dinge zu denken? Al -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Son, 04 Mär 2007, Al Bogner schrieb:
Am Samstag, 3. März 2007 22:47 schrieb David Haller:
Nimm
find ... | while IFS= read -r FILE; do ... ; done
Vielen Dank, wieder einmal! Es gibt im Netz einiges zu Leerzeichen durch "_" rekursiv ersetzen. Ich bin mir aber unsicher, was da passt. Hast du eine Empfehlung dafür? Sehe ich es falsch, dass man da bei obigem Konstrukt nur mit sed die Leerzeichen ersetzen muss oder ist auch an andere Dinge zu denken?
Ja, was machst du mit den Verzeichnissen mit Leerzeichen? Wann werden die umbenannt? Was machst du bei Namens-Kollisionen? Ansonsten geht's aber. Und besser ohne sed. do base="${FILE##*\/}" dir="${FILE%\/*}" new="${base// /_}" target="${dir}/${new}" # if test -e "${target}"; then # echo "Target already exists, skipping '$FILE'" >&2; # continue; # fi mv -i "$FILE" "${target}" done Bei base/dir/new kannst du auch basename, dirname und tr oder sed verwenden. base="$(basename "$FILE")" dir="$(dirname "$FILE")" new="$(echo "$base" | tr ' ' '_')" HTH, -dnh -- Hier ist d.a.g, also sind die uncodierten Zeichen genau wie willkürlich gesetzten Sig Trenner hier On-Topic. [Steffen H. Hillner in dag°] -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Sonntag, 4. März 2007 16:22 schrieb David Haller: Hallo David,
Am Son, 04 Mär 2007, Al Bogner schrieb:
Am Samstag, 3. März 2007 22:47 schrieb David Haller:
Nimm
find ... | while IFS= read -r FILE; do ... ; done
Vielen Dank, wieder einmal! Es gibt im Netz einiges zu Leerzeichen durch "_" rekursiv ersetzen. Ich bin mir aber unsicher, was da passt. Hast du eine Empfehlung dafür? Sehe ich es falsch, dass man da bei obigem Konstrukt nur mit sed die Leerzeichen ersetzen muss oder ist auch an andere Dinge zu denken?
Ja, was machst du mit den Verzeichnissen mit Leerzeichen? Wann werden die umbenannt?
mkdir -p erstellt die Verzeichnisse, Umbennenung vor der Dateinamensänderung.
Was machst du bei Namens-Kollisionen?
Gute Frage. In der Praxis kann ich das ziemlich sicher ausschließen. Wie sieht ein find aus, der alle Ordner und Dateien mit Leerzeichen anzeigt? Ich denke, man sollte vor der Änderung eine Übersicht anzeigen was passiert, bzw. vor Kollisionen warnen.
Ansonsten geht's aber. Und besser ohne sed.
Da hast du natürlich recht.
do base="${FILE##*\/}" dir="${FILE%\/*}" new="${base// /_}" target="${dir}/${new}" # if test -e "${target}"; then # echo "Target already exists, skipping '$FILE'" >&2; # continue; # fi mv -i "$FILE" "${target}" done
Bei base/dir/new kannst du auch basename, dirname und tr oder sed verwenden.
base="$(basename "$FILE")" dir="$(dirname "$FILE")" new="$(echo "$base" | tr ' ' '_')"
Vielen Dank! Al -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Mon, 05 Mär 2007, Al Bogner schrieb:
Am Sonntag, 4. März 2007 16:22 schrieb David Haller: [..]
Ja, was machst du mit den Verzeichnissen mit Leerzeichen? Wann werden die umbenannt?
mkdir -p erstellt die Verzeichnisse, Umbennenung vor der Dateinamensänderung.
man find -> -depth ;)
Was machst du bei Namens-Kollisionen?
Gute Frage. In der Praxis kann ich das ziemlich sicher ausschließen.
Wie sieht ein find aus, der alle Ordner und Dateien mit Leerzeichen anzeigt? Ich denke, man sollte vor der Änderung eine Übersicht anzeigen was passiert, bzw. vor Kollisionen warnen.
find PATHs -depth -name '*[[:space:]]*' oder find PATHs -depth -name '* *' wenn's nur Leerzeichen sein sollen. -dnh --
"Winter, jetzt!" Tut mir leid, Winter macht gerade Urlaub in Australien. Kann ich evtl. weiterhelfen? -- Arnim Sommer -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (2)
-
Al Bogner
-
David Haller