piszę sobie prosty skrypt, który będzie dbał o robienie kopii zapasowych folderów, do których ścieżki będą zapisane w pewnym pliku. I właśnie tu mam problem, jak poprawnie podać listę plików do rsync, bo on chyba nie trawi apostrofów ani cudzysłowów...
RSYNC dla rsync -avr '/home/pawel/Dokumenty/*' '/home/pawel/backup' zwraca:
rsync: link_stat "/home/pawel/Dokumenty/*" failed: No such file or directory (2)
ale gdy podam źródło bez apostrofów-zadziała prawidłowo
Funkcja w której cała akcja się dzieje:
Kod: Zaznacz cały
kopiuj() {
cat '.backup-list' | while read directoryPath
do
rsync -avr "$directoryPath" '/home/pawel/backup'
done
}
Jeśli ta zmienna objęta jest cudzysłowami (jak pokazano wyżej) nie chce się kopiować nic,
jeśli zmienna będzie "goła" bez apostrofów/cudzysłowów, to program będzie miał problemy ze ścieżkami do folderów, które zawierają spacje...
Np. dla listy:
wyrośnie:/home/pawel/Dokumenty/*
/home/pawel/ppp/*
/home/pawel/spacja spacja/*
Kod: Zaznacz cały
sending incremental file list
sent 8813 bytes received 29 bytes 17684.00 bytes/sec
total size is 28111854 speedup is 3179.35
(^^ to dla /Dokumenty/ )
sending incremental file list
sent 131 bytes received 13 bytes 288.00 bytes/sec
total size is 1969 speedup is 13.67
(^^ to dla /ppp/ )
(tu się zaczyna cały problem ze ścieżką: /home/pawel/spacja spacja/* )
sending incremental file list
rsync: link_stat "/home/pawel/spacja" failed: No such file or directory (2)
rsync: change_dir "/home/pawel//spacja" failed: No such file or directory (2)
sent 12 bytes received 12 bytes 48.00 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1070) [sender=3.0.9]

Kod: Zaznacz cały
#!/bin/sh
kopiuj() {
cat '.backup-list' | while read directoryPath
do
rsync -avr $directoryPath '/home/pawel/backup'
done
}
if [ "$1" = "start" ]
then
rm '/home/pawel/.backup-lock'
touch '/home/pawel/.backup-enabled'
echo 'backup odblokowany'
fi
if [ -e '/home/pawel/.backup-enabled' ]
then
if [ -e '/home/pawel/.backup-lock' ]
then
echo 'kopiowanie już rozpoczęte...'
else
touch '/home/pawel/.backup-lock'
echo 'rozpoczęcie kopiowania...'
kopiuj
rm '/home/pawel/.backup-lock'
echo 'zakończenie kopiowania'
fi
fi
if [ "$1" = "stop" ]
then
rm '/home/pawel/.backup-enabled'
while [ -e '/home/pawel/.backup-lock' ] ; do
sleep 1
echo 'czekam na zakończenie poprzedniego kopiowania'
done
kopiuj
echo 'ostatni backup wykonany'
fi
./.backup-rsync start
(tak się plik u mnie nazywa)
potem cyklicznie
./.backup-rsync
a na koniec
./.backup-rsync stop
(w celu ostatecznego skopiowania wszystkiego przed wyłączeniem komputera-jeszcze nie wiem gdzie to wsadzić, żeby zadziałało w czasie wylogowywania, i najlepiej opóźniło wylogowanie aż się nie skopiuje... pomysły??
