Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
Dawno Was publicznie nie gnębiłem ;) No ale wszystko co piękne kiedyś się kończy...
Ma 2 maszyny nazwijmy je A i B. Maszyna A to serwer główny, maszyna B coś a'la serwer backupowy. No i muszę zrobić synchronizację plików, jednak nie jest to takie proste... ślęczę już nad tym sporo i wymiękam. Nie ogarniam regexpów rsynca...
Maszyna A - struktura katalogów (d - katalog, f - plik)
d /home/kontaftp/login1 d /home/kontaftp/login2 d /home/kontaftp/login3 d /home/kontaftp/system d /home/kontaftp/zamowienie
Struktura pojedynczego konta
d /home/kontaftp/loginX/nazwa_zamówienia d /home/kontaftp/loginX/nazwa_zamówienia/min d /home/kontaftp/loginX/nazwa_zamówienia/pliki f /home/kontaftp/loginX/nazwa_zamówienia/pliki/obrazek1.jpg f /home/kontaftp/loginX/nazwa_zamówienia/pliki/__obrazek2.jpg f /home/kontaftp/loginX/nazwa_zamówienia/min/tumbinal1.jpg f /home/kontaftp/loginX/nazwa_zamówienia/min/tumbinal2.jpg d /home/kontaftp/loginX/nazwa_zamówienia2 d /home/kontaftp/loginX/nazwa_zamówienia2/min d /home/kontaftp/loginX/nazwa_zamówienia2/pliki f /home/kontaftp/loginX/nazwa_zamówienia2/pliki/obrazek1.jpg f /home/kontaftp/loginX/nazwa_zamówienia2/pliki/__obrazek2.jpg f /home/kontaftp/loginX/nazwa_zamówienia2/min/tumbinal1.jpg f /home/kontaftp/loginX/nazwa_zamówienia2/min/tumbinal2.jpg
I teraz najważniejsze
Wszystkie pliki , z wykluczeniem katalogu min, to co jest w katalogach /home/kontaftp/system lub /home/kontaftp/zamowienia ma być przegrywane na zewnętrzną maszynę więc robię to tak
rsync -ruvz --exclude="min" /home/kontaftp/system user@maszyna:/home/kontaftp/system rsync -ruvz --exclude="min" /home/kontaftp/zamowienia user@maszyna:/home/kontaftp/zamowienia
Działa idealnie.
Schodki zaczynają się przy poszczególnych kontach/zamówieniach w /home/kontaftp. Mają się przegrywać wszystkie pliki, których nazwa zaczyna się od podwójnego podkreślenia (czyli np __obrazek2.jpg) z pominięciem katalogu min
Próbuję to robić w ten sposób:
ls /home/kontaftp |while read KONTO do if [[ "$KONTO" = "system" ]] || [[ "$KONTO" = "zamowienia" ]] then continue else rsync -ruvz --exclude="min" --include="__*" /home/kontaftp/"$KONTO" user@maszyna:/home/kontaftp done
Ale synchronizuje mi wszystko... Nie ważne jak kombinuje nie mogę tego ugryźć ;/ Wiem mogę findem znaleźć wszystkie pliki pasujące do wzorca i je pojedynczo rsync'kiem lub scp traktować ale to nie o to chodzi... Zastanawiam się czy rekurencyjne przechodzenie do katalogów nie byłoby rozwiązaniem ale jakoś nie mam na to sensownego pomysłu...
Będę wdzięczny za każdą radę, wskazówkę, pomoc.
Z góry wielkie dzięki!
P.S.
Zapomniałem nadmienić - nie musi to być rozwiązanie oparte o rsync. Może być cokolwiek innego byle działo tak jak ma działać ;)
Ostatnio edytowany przez winnetou (2010-07-16 16:39:37)
Offline
Sorry za post pod postem ale nie chce żeby uciekło ;]
znalazłem takie rozwiązanie ale jeszcze mi się coś nie zgrywa
SRC="/home/kontaftp" #źródło czyli wszystko co w /home/kontaftp DEST="/home/kontaftp" #cel czyli katalog na docelowej maszynie... KTO="user" #użytkownik "wykorzystywany" do zdalnego połączenia HOST="IP.IP.IP.IP" #wiadomo ;) ls ${SRC} |while read KATALOG do if [[ ${KATALOG} = "system" ]] || [[ ${KATALOG} = "zamowienia" ]] then continue else find ${SRC} -name "__*" | rsync -ruzv --files-from=- . ${USER}@${HOST}:${DEST} fi done
Z tym że znów jest pewne "ale". Po synchronizacji mam burdel bo robi się coś takiego:
/katalog_z_którego_uruchomiłem_synchronizację/${SRC}/synchronizowany_katalog
a w ${DEST} powinien być po prostu katalog użytkonika i podkatalogi bez wcześniejszych ścieżek... ehhh
Ostatnio edytowany przez winnetou (2010-07-16 02:39:29)
Offline
Jeszcze jeden post pod postem :) W końcu po 3 bezsennych nocach udało mi się zmusić rsynca do działania tak jak powinien. Co prawda nie jest to najwydajniejsze rozwiązanie i przy dużych ilościach plików może przypchać dysk ale działa. Oto odpowiedni fragment kodu:
rsync ${OPTS} ${SRC}/system ${DEST} rsync ${OPTS} ${SRC}/programnfzlecen ls ${SRC}|while read DIR do if [[ ${DIR} = "system" ]] || [[ ${DIR} = "programnfzlecenia" ]] then continue else cd ${SRC}/${DIR} find . -name "__*" |rsync ${OPTS_UNDER} . ${DEST}/${DIR} fi done
Przy czym:
OPTS="-ruzv --exclude=${THUMBS} -4 --log-file=${LOG} --size-only ${BANDWIDTH_LIMIT}" OPTS_UNDER="-ruzv --files-from=- -4 --log-file=${LOG_UNDER} --size-only ${BANDWIDTH_LIMIT}" SRC="/home/kontaftp" DEST="${USER}@${HOST}:/home/kontaftp"
Offline
Strony: 1