2009-06-03 9 views
17

Czy możliwe jest określenie zakresu czasu, aby rsync działał tylko na ostatnio zmienionych plikach.Jak używać rsync do tworzenia kopii zapasowych plików zmienionych w ostatnim okresie?

Piszę skrypt do kopii zapasowej ostatnio dodane pliki przez SSH i rsync wydaje się skutecznym rozwiązaniem. Mój problem polega na tym, że moje katalogi źródłowe zawierają olbrzymi backlog starszych plików, których nie interesuje tworzenie kopii zapasowych.

Jedyne rozwiązanie, na które natknąłem się, to wyszukiwanie casu w celu wygenerowania pliku --files-from. To działa, ale mam do czynienia z niektórymi starymi instalacjami z wersjami rsync, które nie obsługują --files-from. Rozważam generowanie - obejmują-z wzorców w taki sam sposób, ale chciałbym znaleźć coś bardziej eleganckiego.

+0

Po wykonaniu pierwszego rsync przy następnym wywołaniu zostanie przesłane tylko nowe lub zmodyfikowane pliki. Taki jest cel rsync. – lothar

+0

Inną opcją może być reorganizacja układu katalogu, w którym pliki, których nie chcesz tworzyć kopii zapasowych, znajdują się w innej ścieżce, dzięki czemu możesz umieścić tę ścieżkę na liście ignorowania dla rsync. – lothar

+0

Chciałbym zasugerować użycie opcji '-t' rsync, ale to nie robi dokładnie tego, o co się pytałem – Hasturkun

Odpowiedz

26

Wygląda można określić poleceń powłoki w argumentach do rsync (patrz Remote rsync executes arbitrary shell commands)

więc byłem w stanie skutecznie ograniczyć pliki rsync patrzy za pomocą:

rsync -av remote_host:'$(find logs -type f -ctime -1)' local_dir 

ten szuka plików zmienionych w ostatnim dniu (-ctime -1), a następnie zsynchronizuje je z local_dir.

Nie jestem pewien, czy ta funkcja jest zgodna z projektem, ale nadal wkopię się w dokumentację.

+0

Po prostu chciałem upuścić linię, która właśnie przyszła, jest bardzo przydatna dla skryptu importu danych, którego używam. Dziękuję Ci! – Matthew

+1

Uważaj na to; jeśli masz dużo pasujących do siebie plików, wyniki zagnieżdżonego znaleziska mogą zostać wprowadzone do limitu długości wiersza poleceń powłoki. Zdarzyło mi się. – GaryO

+0

Nie zachowa to struktury katalogów. – carlosvini

1

Co powiesz na utworzenie katalogu tymczasowego, dowiązanie symboliczne lub stałe łączenie plików, a następnie zsynchronizowanie?

2

Po prostu weź ciepło podczas tworzenia kopii zapasowej całego katalogu i skorzystaj z przyrostowego wsparcia zapewnianego przez rsync i rdiff oraz ich kuzynów, nie zmarnujesz miejsca na dysku, na których są one kopie zapasowe, ponieważ będą być nieustannie niezmienione.

Tworzenie kopii zapasowej jest prostsze i wiąże się z mniejszym ryzykiem błędów. Próba selektywnego tworzenia kopii zapasowych niektórych plików, a nie innych, jest receptą na nie tworzenie kopii zapasowych, co jest potrzebne, nie zdając sobie z tego sprawy, a następnie zostaje spalona, ​​gdy nie można przywrócić krytycznego pliku.

W przeciwnym razie należy zreorganizować katalog źródłowy, aby w skrypcie tworzenia kopii zapasowych było mniej "podejmowania decyzji".

+0

Zwykle zgadzam się co do ryzyka błędów, ale nigdy nie będę używał starszych plików (dzienników i innych rekordów, które nigdy się nie zmienią). Po prostu wziąłem ciepło, ale myśl o konieczności pobrania i regularnego przetworzenia kilku gigabajtów niechcianego nadmiaru jest tym, co przede wszystkim wywołało to pytanie. Reorganizacja jest prawdopodobnie rozwiązaniem - nie mogę zmienić istniejącej struktury, ale mogę skonfigurować katalog tymczasowy, jak zasugerował Hasturkun. – Ken

+0

Dla mnie chcę przesłać z zdalnego do lokalnego, przetwarzać pliki, a następnie usuwać stare (mtime +30) z lokalnego, aby zaoszczędzić miejsce. Naive rsync ponownie pobiera stare, ponieważ brakuje ich teraz w wersji lokalnej. – GaryO

1

Czy mogę zasugerować, abyś rzucił rsync i spojrzał na kopię zapasową rdiff?

+0

Dzięki temu przyjrzę się - sprawdziłem to wcześniej, ale problem zgodności CIFS mnie zniechęcił. (http://rdiff-backup.nongnu.org/FAQ.html#cifs) – Ken

Powiązane problemy