Uzyskiwanie rsync do przenoszenia pliku ze źródła do miejsca docelowego?

15

Czy rsync to dobry wybór dla mojego projektu?

Muszę:
- skopiować pliki ze źródła do folderu docelowego przez SSH,
- upewnić się, że wszystkie pliki zostały skopiowane,
- usunąć pliki źródłowe po skopiowaniu.
- jeśli mam konflikt nazwy, muszę zmienić nazwę plików.

Wygląda na to, że mogę użyć opcji: --remove-source-files (aby usunąć pliki źródłowe)
Ale jak rsync zarządza konfliktem, czy mogę mieć reguły?

Przypadek użycia w moim projekcie:

Przeprowadzam obliczenia naukowe na serwerze A, a wyniki są wstawiane do folderu „proces”, do każdego obliczenia mam repozytorium takie jak to: / process / calc1.
Teraz chciałbym przenieść repozytorium „/ calc1” na serwer B (otrzymuję / process / calc1) i usunąć „calc1” z serwera A.
... Podczas kolejnego obliczenia otrzymuję „/ process / calc2” na serwerze A, pomysł polega także na przeniesieniu „calc2” do katalogu „/ process /” na serwerze B, a następnie mam teraz na serwerze B:
- / process / calc1
- / process / calc2
(i / process / na serwerze A jest pusty).

Jak rsync poradzi sobie z konfliktem (na serwerze B), jeśli po nowym obliczeniu mam inny folder, taki jak „/ process / calc1” na serwerze A (jeśli „/ process / calc1” już istnieje na serwerze B)?

Czy można dodać reguły za pomocą rsync i zmienić nazwę „/ process / calc1” na „process / calc1R2” na serwerze B? I tak dalej (np .: calc1R3)?

Dzięki.

użytkownik44782
źródło

Odpowiedzi:

11

Jeśli naprawdę chcesz używać rsync, wygląda na to, że potrzebujesz kombinacji --backup, --backup-dir i --suffix. Myślę, że najbliższe jest coś takiego

rsync -abv --suffix R1 --remove-source-files src/ dst/

Byłoby to prawie tak, jak chcesz, ale nie zmieniłoby nazw plików dokładnie tak, jak chcesz. Opcja --suffix dołącza tekst na końcu istniejącego pliku, ale robi to tylko w przypadku pierwszego konfliktu. Jeśli uruchomisz go ponownie, po prostu nadpisze twoją pierwszą kopię zapasową. Trzeba będzie zmieniać tę wartość sufiksu przy każdym uruchomieniu polecenia, co zadziałałoby, gdybyś użył czegoś ze znacznikiem czasu, na przykład:

rsync -abv --suffix `date +%Y%m%d%k%M%S` --remove-source-files src/ dst/

Nie jestem pewien, czy to przesada w stosunku do tego, czego szukasz, ale powinno to spełnić Twoje wymagania.

Paul Kroon
źródło
Mogę mieć duże pliki po obliczeniach, więc prawdopodobnie lepiej jest użyć rsync (w przypadku problemów z siecią).
user44782,
1

Jak sama nazwa wskazuje, rsync służy do synchronizacji plików. Po „zsynchronizowaniu” oznacza to, że pliki źródłowe i docelowe są takie same. To nie wygląda tak, jak chcesz.

Wygląda na to, że chcesz tylko przenieść niektóre pliki. Nie musisz do tego używać rsync. Wygląda na to, że używasz Linuksa lub BSD. Możesz użyć mv -n przez ssh. Opcja -n nie zastępuje istniejących plików. To nie jest w 100% automatyczne. Jednak nie widzę, jak plik mógł już istnieć w twoim przypadku. Pliki zostaną skopiowane ze źródła do miejsca docelowego, a następnie usunięte ze źródła. Czy chcesz ponownie uruchomić te same obliczenia? Czy to dlatego skończysz z plikami o tej samej nazwie? Sugeruję dodanie numeru uruchomienia lub numeru partii do nazwy folderu. I tak byś chciał. Czy masz kontrolę nad nazwą tego folderu? Więcej informacji? Polecam umieszczanie poleceń w skrypcie bash lub podobnym.

d -_- b
źródło
W niektórych przypadkach muszę ponownie uruchomić to samo obliczenie (i dlatego kończę na plikach o tej samej nazwie). Masz rację, dołączenie przebiegu jest dobrym pomysłem: znajdź także polecenie mmv -a (mam nadzieję, że działa w trybie ssh, ktoś już używa tego wiersza poleceń?). Mam kontrolę nad nazwą folderu.
user44782,
Najprawdopodobniej nie jest zainstalowany na komputerze. Jeśli to twój komputer, możesz go jednak zainstalować. Oparty na Debianie: sudo apt-get install mmv Możesz również przeglądać sshfs lub NFS i wyświetlać pliki bezpośrednio w ostatecznym miejscu docelowym. Chyba że istnieje potrzeba pośredniej lokalizacji (kontrola, modyfikacja itp.). Jeśli połączenie między dwiema maszynami jest zawodne, to oczywiście zły pomysł. Sugestia Pawła jest dobra. Chociaż dodanie numeru przebiegu na początku byłoby prawdopodobnie bardziej zorganizowane.
d -_- b
1
Jak używać „mv -n” nad ssh? Możesz użyć mv przez sshfs.
guettli
Operacje ... Tak, to czyni to jaśniejszym.
d -_- b
-1

Podsumowując, użyj SSH:

Dostęp przez zdalną powłokę:

Pull: rsync [OPCJA ...] [USER @] HOST: SRC ... [DEST]

Wciśnij: rsync [OPCJA ...] SRC ... [USER @] HOST: DEST

Wszystko zostało wyjaśnione w rsync (1).

Jeśli chodzi o tworzenie skryptów dla pracy z kronikami, aby automatycznie rsyncować ssh bez konieczności podawania hasła, zajrzyj również do ssh-agent (1).


źródło