Próbuję skopiować drzewo katalogów rekurencyjnie zachowując dowiązania twarde do pliku. Przy użyciu gnu cp działałoby to z flagą -l. cp odtworzyłby wówczas strukturę katalogów, ale nie musiałby kopiować zawartości każdego pliku.
Jest to wstęp do kopii zapasowej, najpierw chcę zrobić tanią (na stałe) kopię poprzedniej kopii zapasowej, a następnie zsynchronizować katalog źródłowy z tą kopią. W przybliżeniu:
cp -r -l yesterdays_backup todays_backup
rsync -a source_dir todays_backup
Niestety cp OSX nie obsługuje flagi -l, o ile mogę stwierdzić, cpio nie obsługuje kopiowania rekurencyjnego. Inną alternatywą jest pax, ale prowadzi to do skopiowania całej struktury katalogów:
pax -rw backups/yesterdays_backup backups/todays_backup
przekształca:
yesterdays_backup
|
\source_dir (...)
do:
todays_backup
|
\backups
\yesterdays_backup
\source_dir(...)
Powinien istnieć łatwy / oczywisty sposób, aby to zrobić, ale obecnie jestem zaskoczony ... Jakieś alternatywy dla CPIO i PAX? Chciałbym uniknąć instalowania GNU CP.
Wiem o Timemachine, ale nie będzie to poprawne tworzenie kopii zapasowych zaszyfrowanych katalogów przyrostowo.
Odpowiedzi:
Instalacja cp z MacPorts jest łatwa, jednak jeśli nie chcesz lub chcesz utworzyć przenośny skrypt, masz trzy opcje:
rsync
CPIO
patena
źródło
Łatwo jest zainstalować
coreutils
pakiet z MacPorts, który zawieracp
polecenie GNU o zmienionej nazwiegcp
.Ale jeszcze lepsze, nowsze wersje rsync, w tym przynajmniej ta w OS X 10.5, obsługują opcję --link-dest, która powinna wyeliminować potrzebę początkowego cp -al. Zobacz tutaj . Dobrą praktyką jest również używanie opcji -E do kopiowania rozszerzonych atrybutów, list ACL itp.
źródło
Chociaż
cpio
nie obsługuje bezpośredniego kopiowania rekurencyjnego, możesz podać dokładną listę plików, które chcesz skopiować, do standardowego wejścia i uzyskać efekt kopiowania rekurencyjnego za pomocąfind
pipingucpio
. Jest to bezpośrednio analogiczne do używania GNUtar
z opcjami-T -
(co oznacza odczytanie listy plików, których kopię zapasową należy wykonać ze standardowego wejścia).źródło
Wierzę, że to, czego chcesz, można również osiągnąć
ditto yesterdays_backup todays_backup
. Domyślnieditto
wykonuje kopię rekurencyjną, która zachowuje twarde łącza, listy ACL i rozszerzone atrybuty.źródło
+1 za odpowiedź Paulsa. ditto byłoby opcją, ale tylko w połączeniu z find - zachowuje twarde linki, ale tylko wewnątrz katalogów.
źródło