simples (?) sh-problem....

soul_rebel

ist immer auf der flucht
habe folgende situation:
ein backup rechner soll einmal die woche vom server einen one-way-sync machen und alle dateien, die nicht mehr auf dem server liegen in einen speziellen ordner verschieben (wo ich dann entscheiden kann ob sie wirklich weg sollen).
und obwohl ich weiß, dass ich mit sh mindestens dreimal solange brauch sowas umzusetzen als mit c, hbae ichs versucht ;)
naja soweit bin ich jetzt
Code:
## sync the dir
rsync --verbose --recursive --keep-dirlinks --perms --owner --group --times --progress --human-readable /mnt/serverdaten ./
echo "Update abgeschlossen."
echo "Verschiebe ueberfluessige Dateien nach /ziel"
das updaten des backupsverzeichnisses klappt...
Code:
## check for files in backup that have been deleted or renamed
LIST=`rsync --verbose --recursive --copy-dirlinks --dry-run ./serverdaten /mnt/ | grep "serverdaten/" `

for i in $LIST; do
        echo i
done
das "echo i" wird dann natürlich durch "mv i /ziel/" ersetzt.
das problem ist, dass die dateinamen auch spaces enthalten und der for-loop LIST an spaces und nicht an newlines schneidet... hab schon mit sed die spaces durch "\ " ersetzt aber das hilft nicht...
was kann ich da machen?

vielen dank!
 
super danke!
das macht genau was ich brauche....

hm das verschieben klappt trotzdem nicht hba jetzt folgendes im loop:
Code:
for i in $LIST; do
        echo mv \"./$i\" /zieldir/
        mv \"./$i\" /zieldir/
done
erst gibt er aus welchen befhel er danach ausführt. das was er ausgibt ist auch völlig korrekt (also wenn ich die ausgbae vom echo manuell eingabe wir die datei verschoben), aber der mv befehl im skript macht irgendwas falsch denn er gibt mir für jede datei folgendes aus:
Code:
mv: rename "./pfad/zu/datei_foo.bar" to /zieldir/datei_foo.bar": No such file or directory
... sehr seltsam besonders das einzelne " dahinten...
 
jo danke!

dachte irgendwie, dass der ohne die backslashes das dazwischen als string sieht... naja, wieder was dazugelernt ;)
 
wesentlich besser waere
Code:
rsync --verbose --recursive --copy-dirlinks --dry-run ./serverdaten /mnt/ | grep "serverdaten/" | while read i; do
        echo "$i"
done
 
rsync --verbose --recursive --copy-dirlinks --dry-run ./serverdaten /mnt/ | grep "serverdaten/" | while read i; do
echo "$i"
done

Das sollte in ksh und zsh funktionieren, war wie sieht es mit sh und bash aus?
 
Zurück
Oben