Andreas Achtzehn wrote:
Hallo Liste!
Für ein Backup-Script brauche ich dringend eine Lösung. Wir finden die zu backupenden Dateien durch einen find und schreiben die Namen in eine Variable:
VARIABLE=`find /dir -name "*.bck"` Danach wollen dir die Dateien kopieren: for i in $VARIABLE; do cp "$i" /ziel done
find füllt die Variable wunderbar, doch das Problem entsteht, wenn kopiert werden soll. Dateien, die Leerzeichen enthalten, werden durch for als zwei Werte interpretiert.
find schreibt in VARIABLE: /daten/Datei 1.doc cp will kopieren: /daten/Datei 1.doc
Ein find -printf "\"%p\"\n" war nicht erfolgreich, da for die Anführungszeichen als zum Dateinamen gehörend interpretiert. Das liefert
find schreibt in VARIABLE: "/daten/Datei 1.doc" cp will kopieren: "/daten/Datei 1.doc"
Wie kann ich das Ganze umstricken? Wie würde der find-Befehl mit -exec aussehen? Leider ist es nur schwer möglich, auf die for-Schleife zu verzichten, da noch einiges anderes mit der Datei gemacht wird, aber notfalls kann ich darauf zurückweichen. Die Lösung mit for wäre mir aber lieber.
Wie kann ich dieses Problem lösen?
#!/bin/bash IFS=" " VARIABLE=`find ./ -type f -name "*.bck" | xargs --null` for i in $VARIABLE; do /bin/cp $i "$i.back" done Vielleicht so? Gruß Daniel