MacOS'ta cp -r -l (sabit bağlantıları koruyan yinelemeli kopya)


12

Dosyaya sabit bağlantıları koruyarak bir dizin ağacını kopyalamaya çalışıyorum. GNU CP kullanarak bu -l bayrağı ile çalışır. cp daha sonra dizin yapısını yeniden oluşturur, ancak her dosyanın içeriğini kopyalamanız gerekmez.

Bu bir yedek için ön, önce önceki yedeklemenin ucuz (sabit bağlantılı) bir kopyasını yapmak ve sonra bu kopya üzerinde kaynak dizini rsync istiyorum. Kabaca:

 cp -r -l yesterdays_backup todays_backup
 rsync -a source_dir todays_backup

Ne yazık ki, OSX'in cp'si -l bayrağını desteklemiyor, anlayabildiğim kadarıyla, cpio özyinelemeli kopyalamayı desteklemiyor. Diğer alternatif pax'tur, ancak bu tüm dizin yapısının kopyalanmasına yol açar:

 pax -rw backups/yesterdays_backup backups/todays_backup

dönüşümler:

 yesterdays_backup
 |
  \source_dir (...)

için:

 todays_backup
 |
  \backups
          \yesterdays_backup
                            \source_dir(...)

Bunu yapmanın kolay / açık bir yolu olmalı, ama şu anda güdük ... cpio ve pax için alternatif var mı? GNU CP yüklemeden kaçınmak istiyorum.

Timemachine'ın farkındayım, ancak bu şifrelenmiş dizinleri aşamalı olarak yedeklemeyecektir.

mac  backup  rsync  cp 

cpio ile birlikte bulmayı kullanarak burada açıklandığı gibi özyinelemeli cpio eksikliğini aşmak : ( mikerubel.org/computers/rsync_snapshots/#Incremental ) ama çok şık görünmüyor ...

Yanıtlar:


16

MacPorts'tan cp yüklemek yeterince kolaydır, ancak taşınabilir bir komut dosyası oluşturmak veya istemiyorsanız, üç seçeneğiniz vardır:

rsync

rsync --archive --link-dest=../yesterdays_backup backups/yesterdays_backup\
   backups/todays_backup

cpio

mkdir backups/todays_backup
cd backups/yesterdays_backup
find . -print | cpio -p -al ../todays_backup

Sulh

mkdir backups/todays_backup
cd backups/yesterdays_backup
pax -rwl . ../todays_backup

Kaynak ve hedef farklı disklerde ise ne olur? Rsync, hedefe yapılan kopyada sabit bağlantıları kaynaktan koruyor mu?
lpacheco

7

Yeniden adlandırılan GNU komutunu içeren coreutilspaketi MacPorts'tan yüklemek kolaydır .cpgcp

Ancak daha da iyisi, en azından OS X 10.5 sürümü de dahil olmak üzere daha yeni rsync sürümleri, ilk cp -al gereksinimini ortadan kaldırması gereken --link-dest seçeneğini destekler. Buraya bakın . Genişletilmiş öznitelikleri, EKL'leri vb. Kopyalamak için -E seçeneğini kullanmak iyi bir uygulamadır.


1

Her ne kadar cpiodoğrudan özyinelemeli kopyalamayı desteklemez, size standart girişine kopyalamak istediğiniz dosyaların tam listesini beslemek ve kullanan bir özyinelemeli kopya etkisini elde edebilirsiniz findiçine borulu cpio. Bu tarseçeneklerle GNU kullanmaya doğrudan benzerdir -T -(yani standart girişten yedeklenecek dosyaların listesini okuyun).


1

İstediğin şeyin de başarılabileceğine inanıyorum ditto yesterdays_backup todays_backup. Varsayılan olarak, dittosabit bağlantıları, ACL'leri ve genişletilmiş öznitelikleri koruyan özyinelemeli bir kopya yapar.


sorun dizin amacı boyunca sabit bağlantılar oluşturmak olduğunda kopya artık ucuz değil olmasıdır. ditto, var olduklarında onları koruyabilir, ancak kopya oluşturmak yerine bağlantı kurması söylenemez.
Florenz Kley

Aynen dizin sabit bağlantıları korumak için söylenebilir bile sanmıyorum. adam sayfası sadece sabit bağlantılar olduğunu söylüyor
Chris F Carroll

0

Pauls'un cevabı için +1. ditto bir seçenek olurdu, ancak sadece find ile birlikte kullanıldığında - sabit bağlantıları korur, ancak sadece dizinlerin içinde.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.