Saya mencoba menyalin pohon direktori secara rekursif menjaga hardlink ke file. Menggunakan gnu cp, ini akan bekerja dengan flag -l. cp kemudian akan membuat ulang struktur direktori, tetapi tidak perlu menyalin isi dari setiap file.
Ini merupakan pendahuluan untuk cadangan, pertama saya ingin membuat salinan murah (hardlinked) dari cadangan sebelumnya dan kemudian rsync direktori sumber melalui salinan ini. Kurang lebih:
cp -r -l yesterdays_backup todays_backup
rsync -a source_dir todays_backup
Sayangnya, cp OSX tidak mendukung flag -l, sejauh yang saya tahu, cpio tidak mendukung penyalinan rekursif. Alternatif lain adalah pax, tetapi itu mengarah ke seluruh struktur direktori yang disalin:
pax -rw backups/yesterdays_backup backups/todays_backup
mengubah:
yesterdays_backup
|
\source_dir (...)
untuk:
todays_backup
|
\backups
\yesterdays_backup
\source_dir(...)
Seharusnya ada cara mudah / jelas untuk melakukan ini, tapi saya saat ini bingung ... Ada alternatif untuk cpio dan pax? Saya ingin menghindari menginstal gnu cp.
Saya mengetahui Timemachine, tetapi itu tidak akan mencadangkan direktori terenkripsi dengan baik secara bertahap.
Jawaban:
Cukup mudah untuk menginstal cp dari MacPorts, namun, jika Anda tidak mau, atau ingin membuat skrip portabel, maka Anda memiliki tiga opsi:
rsync
cpio
pax
sumber
Sangat mudah untuk menginstal
coreutils
paket dari MacPorts yang berisicp
perintah GNU yang diubah namanya menjadigcp
.Tetapi bahkan lebih baik, versi rsync yang lebih baru, termasuk yang ada di OS X 10.5 setidaknya, mendukung opsi --link-dest yang seharusnya menghilangkan kebutuhan akan cp -al awal. Lihat di sini . Ini praktik yang baik untuk menggunakan opsi -E, juga, untuk menyalin atribut yang diperluas, ACL, dll.
sumber
Meskipun
cpio
tidak mendukung penyalinan rekursif secara langsung, Anda dapat memberi makan daftar file yang ingin Anda salin ke input standarnya, dan mencapai efek salinan rekursif dengan menggunakanfind
piped intocpio
. Ini secara langsung analog dengan menggunakan GNUtar
dengan opsi-opsi-T -
(yang berarti membaca daftar file yang dicadangkan dari input standar).sumber
Saya percaya apa yang Anda inginkan juga dapat dicapai dengan
ditto yesterdays_backup todays_backup
. Secara default,ditto
apakah salinan rekursif yang mempertahankan tautan keras, ACL, dan atribut yang diperluas.sumber
+1 untuk jawaban Pauls. DITTO akan menjadi pilihan, tetapi hanya jika digunakan bersama dengan find - ia mempertahankan tautan keras, tetapi hanya di dalam direktori.
sumber