Mailinglist Archive: opensuse-de (6956 mails)

< Previous Next >
Re: bash word
  • From: "D. Wolpert" <dw@xxxxxxxxx>
  • Date: Wed, 21 Nov 2001 16:03:59 +0100
  • Message-id: <3BFBC25F.F9E91BD4@xxxxxxxxx>
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

< Previous Next >
References