man/archiving_and_compression
man · Arşivleme & Sıkıştırma

$ ditto

Bölüm 1 · Arşivleme & Sıkıştırma

dizin hiyerarşilerini kopyalar, arşivler oluşturur ve ayıklar

Özet

ditto [-v] [-V] [-X] [<options>] src ... dst_directory
ditto [-v] [-V] [<options>] src_file dst_file
ditto -c [-z | -j | -k] [-v] [-V] [-X] [<options>] src dst_archive
ditto -x [-z | -j | -k] [-v] [-V] [<options>] src_archive ... dst_directory
ditto -h | --help

Açıklama

İlk biçiminde ditto, bir veya daha fazla kaynak dosyayı ya da dizini bir hedef dizine kopyalar. Hedef dizin mevcut değilse, ilk kaynak kopyalanmadan önce oluşturulur. Hedef dizin zaten mevcutsa, kaynak dizinler hedefin önceki içeriğiyle birleştirilir.

İkinci biçiminde ditto, bir dosyayı belirtilen dst_file yoluna kopyalar.

Sonraki iki biçim, ditto komutunun arşivler oluşturma ve ayıklama yeteneğini yansıtır. Bu arşivler CPIO biçiminde (Unix içerikleri için tercih edilir) veya PKZip biçiminde (Windows uyumluluğu için) olabilir. src_archive ve dst_archive tek bir - karakteri olabilir; bu durum ditto komutunun arşiv verisini sırasıyla stdin'den okumasına veya stdout'a yazmasına neden olur.

ditto, argüman olarak sağlanan sembolik bağları izler; ancak kaynak veya hedef hiyerarşilerinde gezinirken hiçbir bağı izlemez. ditto, bir kaynaktan kopyalandıklarında hedefteki mevcut dosyaların, sembolik bağların ve aygıtların üzerine yazar. Sonuçta oluşan dosyalar, bağlar ve aygıtlar, kopyalandıkları kaynak öğelerle aynı izin moduna (mode), erişim süresine, değişiklik süresine, sahibine ve grubuna sahip olur.

Borular (pipes), soketler ve adları .nfs veya .afpDeleted ile başlayan dosyalar yoksayılır. ditto, hedefteki mevcut dizinlerin izin modunu, sahibini, grubunu, genişletilmiş özniteliklerini veya ACL'lerini değiştirmez. Dosyalar ve sembolik bağlar dizinlerin üzerine yazamaz veya bunun tersi yapılamaz.

ditto, kopyalama sırasında Universal Mach-O ikililerini (binaries) "seyreltmek" (thin) için kullanılabilir. Ayrıca bir BOM ("Bill of Materials") dosyasının içeriğine göre dosyaları seçici olarak kopyalayabilir. ditto, kaynak dizinlerinde bulunan dosya sabit bağlarını (hard links) korur, ancak dizin sabit bağlarını korumaz. Süper kullanıcı olarak çalıştırıldığında setuid ve setgid modlarını muhafaza eder.

ditto, --norsrc kullanılarak aksi belirtilmedikçe kopyalama yaparken kaynak çatallarını (resource forks) ve HFS meta-veri bilgilerini korur. --norsrc; kaynak çatallarının, genişletilmiş özniteliklerin, Erişim Denetim Listelerinin (ACL'ler) ve karantina bitlerinin kopyalanmasını devre dışı bırakır.

DITTONORSRC, komut satırındaki --norsrc --noextattr --noacl --noqtn seçeneklerinin takma adı (alias) olarak ortamda (environment) ayarlanabilir. Ancak her bir seçenek ayrı ayrı açılıp kapatılabilir; daha fazla ayrıntı için Seçenekler bölümüne bakın.

Seçenekler

  • -h, --help
    Tam kullanımı yazdırır.

  • -v
    Kopyalanan her kaynak dizini için stderr'e bir çıktı satırı yazdırır.

  • -V
    Kopyalanan her dosya, sembolik bağ ve aygıt için stderr'e bir çıktı satırı yazdırır.

  • -X
    Bir veya daha fazla kaynak dizini kopyalarken, farklı bir aygıt kimliğine (device ID) sahip dizinlerin içine inmez.

  • -c
    Hedef yolda bir arşiv oluşturur. -k verilmediği sürece varsayılan biçim CPIO'dur. CPIO arşivleri, adları .cpio ile biten dosyalarda saklanmalıdır. Sıkıştırılmış CPIO arşivleri, adları .cpgz ile biten dosyalarda saklanmalıdır.

  • -z
    gzip(1) sıkıştırmasını kullanarak sıkıştırılmış CPIO arşivleri oluşturur.

  • -j
    bzip2(1) sıkıştırmasını kullanarak sıkıştırılmış CPIO arşivleri oluşturur.

  • -x
    Kaynak argümanları olarak verilen arşivleri ayıklar. -k verilmediği sürece biçimin CPIO olduğu varsayılır. Sıkıştırılmış CPIO otomatik olarak işlenir.

  • -k
    Varsayılan CPIO yerine bir PKZip arşivinden oluşturur veya ayıklar. PKZip arşivleri, adları .zip ile biten dosyalarda saklanmalıdır.

  • --keepParent
    Bir arşiv oluştururken, üst dizin adı olan src değerini dst_archive içine gömer.

  • --arch arch
    Universal ikilileri (binaries) belirtilen mimariye göre seyreltir (thin). Birden fazla --arch seçeneği belirtilirse, sonuçta oluşan hedef dosya belirtilen mimarilerin her birini içerir (kaynak dosyada mevcutlarsa). arch değeri arm64, x86_64 vb. olarak belirtilmelidir.

  • --bom bom
    Yalnızca belirtilen BOM dosyasında mevcut olan dosyaları, bağları, aygıtları ve dizinleri kopyalar.

  • --rsrc
    Kaynak çatallarını (resource forks) ve HFS meta-verilerini korur. ditto, kaynak çatallarını yerel olarak desteklemeyen dosya sistemlerinde bu verileri Carbon uyumlu ._ AppleDouble dosyalarında saklar. Mac OS X 10.4 sürümünden itibaren --rsrc varsayılan davranıştır.

  • --norsrc
    Kaynak çatallarını ve HFS meta-verilerini korumaz. Hem --norsrc hem de --rsrc geçirilirse, en son geçirilen öncelikli olur. Her iki seçenek de DITTONORSRC değişkenini geçersiz kılar. Açıkça belirtilmediği sürece, Mac OS X 10.4 davranışıyla eşleşmesi için --norsrc seçeneği --noextattr ve --noacl seçeneklerini de dolaylı olarak etkinleştirir.

  • --extattr
    Genişletilmiş öznitelikleri korur. --rsrc gerektirir. Mac OS X 10.5 sürümünden itibaren --extattr varsayılan davranıştır.

  • --noextattr
    Genişletilmiş öznitelikleri korumaz. --norsrc gerektirir.

  • --qtn
    Karantina bilgilerini korur. Mac OS X 10.5 sürümünden itibaren --qtn varsayılan davranıştır.

  • --noqtn
    Karantina bilgilerini korumaz.

  • --acl
    Erişim Denetim Listelerini (ACL'ler) korur. Mac OS X 10.5 sürümünden itibaren --acl varsayılan davranıştır.

  • --noacl
    ACL'leri korumaz.

  • --nocache
    Mac OS X Unified Buffer Cache (Birleşik Ara Bellek Önbelleği) kullanarak kopyalama yapmaz. Okunan ve yazılan dosyalar önbelleğe alınmaz; ancak dosya zaten önbellekte mevcutsa, önbelleğe alınmış bilgiler kullanılır.

  • --hfsCompression
    Dosyaları kopyalarken veya bir arşivden içerik ayıklarken, hedef dosya sistemi sıkıştırmasını destekleyen bir HFS+ veya APFS birimi ise uygun olan tüm içerik sıkıştırılır. Bu yalnızca Mac OS X 10.6 veya daha yeni sürümlerde desteklenir ve yalnızca sistem dosyalarını içeren kurulum ve yedekleme senaryolarında kullanılmak üzere tasarlanmıştır.

    Dosya sistemi sıkıştırması kullanan dosyalar Mac OS X 10.6'dan önceki sürümlerde okunamadığından, bu bayrak sistem dışı dosyalarla veya Mac OS X 10.6'dan önceki bir sürümde kullanılacak kullanıcı tarafından oluşturulmuş diğer içeriklerle çalışırken kullanılmamalıdır.

  • --nohfsCompression
    İçerik zaten dosya sistemi sıkıştırmasıyla sıkıştırılmamışsa, bir arşivden kopyalama veya ayıklama yaparken dosyaları dosya sistemi sıkıştırmasıyla sıkıştırmaz. Bu bayrak yalnızca Mac OS X 10.6 veya daha yeni sürümlerde desteklenir. Varsayılan değer --nohfsCompression değeridir.

  • --preserveHFSCompression
    Dosyaları dosya sistemi sıkıştırmasını destekleyen bir HFS+ veya APFS birimine kopyalarken ditto, dosya sistemi sıkıştırması kullanan tüm kaynak dosyaların sıkıştırmasını korur. Bu bayrak yalnızca Mac OS X 10.6 veya daha yeni sürümlerde desteklenir. Varsayılan değer --preserveHFSCompression değeridir.

  • --nopreserveHFSCompression
    Zaten dosya sistemi sıkıştırmasıyla sıkıştırılmış olan dosyaları kopyalarken dosya sistemi sıkıştırmasını korumaz. Bu yalnızca Mac OS X 10.6 veya daha yeni sürümlerde desteklenir.

  • --sequesterRsrc
    Bir PKZip arşivi oluştururken, kaynak çatallarını ve HFS meta-verilerini __MACOSX alt dizininde korur. PKZip ayıklama işlemi bu kaynakları otomatik olarak bulur.

  • --zlibCompressionLevel num
    Bir PKZip arşivi oluştururken kullanılacak sıkıştırma seviyesini ayarlar. Sıkıştırma seviyesi 0 ile 9 arasında ayarlanabilir; burada 0 sıkıştırma olmadığını, 9 ise en iyi (en yavaş) sıkıştırmayı temsil eder. Varsayılan olarak ditto, zlib tarafından tanımlanan varsayılan sıkıştırma seviyesini kullanır.

  • --password
    Parola ile şifrelenmiş bir ZIP arşivini ayıklarken, ditto komutunun dosya içeriğini ayıklamak üzere kullanılacak bir parola sormasına izin vermek için --password belirtmeniz gerekir. Bu seçenek sağlanmazsa ve parola ile şifrelenmiş bir dosyayla karşılaşılırsa ditto bir hata iletisi verir.

  • --persistRootless
    Değiştirilen bir dosyanın SF_RESTRICTED bayrağı veya com.apple.rootless genişletilmiş özniteliği ayarlanmışsa, kaynak dosyada aynı bayrak veya öznitelik olmasa bile bunu korur.

  • --nopersistRootless
    Değiştirilen dosyalar için SF_RESTRICTED bayrağını veya com.apple.rootless genişletilmiş özniteliğini korumaz.

  • --nonAtomicCopies
    Mevcut dosyaları değiştirirken atomik (bütünsel) kopyalama gerçekleştirmez. Varsayılan olarak ditto, bir kopyalamayı tamamlarken yeni dosyaları atomik olarak eski yerine yerleştirir.

  • --segmentLargeFiles
    Dosyaları bir CPIO arşivine kopyalarken, 8 gigabayttan büyük dosyaları birden çok girdiye böler.

  • --keepBinaries
    Dosyaları kopyalarken, değiştirilen Mach-O ikilisi için özgün ikiliyi kenara ayırır. Dosya adı, önüne .BC.T_ ön eki getirilmiş rastgele bir sayıya dönüştürülür.

  • --keepBinariesList path
    ditto ikili dosyaları sakladığında, saklanan dosyanın konumunu belirtilen yoldaki dosyaya kaydeder.

  • --keepBinariesPattern regex
    Belirtilen düzenli ifadeyle (regular expression) eşleşen her normal dosyayı saklar. Bu dosyanın bir Mach-O ikilisi olması gerekmediğini unutmayın.

  • --lang lang
    -b seçeneği ile belirtilen bir indeks BOM dosyasıyla dosyaları kopyalarken, kullanıcı indeks BOM'dan filtrelenecek dil değişkenlerini belirtebilir. Varsayılan olarak ditto, filtrelenmiş içerikleri temsil eden yeni bir indeks BOM dosyasını /tmp/ditto.XXXXX konumunda oluşturur. Kullanıcı çıktı BOM dosyasını -o bayrağı ile yönlendirebilir.

  • --outBom bom
    Çıktı BOM dosyası için açık bir yol belirtir. Bu BOM dosyası yalnızca kullanıcı -o veya -l bayraklarını belirttiğinde oluşturulur.

  • --clone
    Kopyalama yaparken normal dosyaları kopyalamak (clone) için girişimde bulunur.

  • --noclone
    Dosyaları kopyalamaya çalışmaz.

  • --option key=value
    Kopyalayıcıya geçirilecek isteğe bağlı bir anahtar-değer çifti belirtir. Değer bir dize (string), boolean veya tamsayı olabilir. Boolean değerler true, false, yes veya no olarak belirtilebilir.

Örnekler

src_directory içeriğini dst_directory içine kopyalar; dst_directory zaten mevcut değilse oluşturur:

ditto src_directory dst_directory

src_directory içeriğini dir/dst_directory içine kopyalar; dir ve dst_directory zaten mevcut değilse oluşturur:

ditto src_directory dir/dst_directory

Tüm kaynak dizinlerin içeriklerini dst_directory içine kopyalar; dst_directory zaten mevcut değilse oluşturur:

ditto src-1 ... src-n dst_directory

universal_file içeriğini thin_file içine kopyalar; yürütülebilir kodu çalışma anında sadece ppc olacak şekilde seyreltir:

ditto --arch ppc universal_file thin_file

Scripts dizinini, her türlü kaynağı veya meta-veriyi atlayarak rhost makinesine kopyalar:

ditto -c --norsrc Scripts - | ssh rhost ditto -x --norsrc - ./Scripts

archive.cpio CPIO arşivindeki dosyaları listeler:

pax -f archive.cpio

archive.cpgz sıkıştırılmış CPIO arşivindeki dosyaları listeler:

pax -zf archive.cpgz

Finder'ın Sıkıştır (Compress) işlevine benzer şekilde bir PKZip arşivi oluşturur:

ditto -c -k --sequesterRsrc --keepParent src_directory archive.zip

archive.zip PKZip arşivindeki dosyaları listeler:

unzip -l archive.zip

Hatalar

ditto, her şey kopyalandığında 0, aksi takdirde sıfır dışı bir değer döndürür. ditto neredeyse hiçbir zaman pes etmez; yol boyunca hataları bildirmeyi tercih eder. Hata teşhis (diagnostic) iletileri standart hataya yazdırılır.

Ortam Değişkenleri

  • DITTOABORT: Ortam değişkeni DITTOABORT ayarlanmışsa, ditto ölümcül bir hatayla karşılaştığında abort(3) çağrısı yapar.

  • DITTONORSRC: DITTONORSRC ayarlanmışsa ancak --rsrc, --extattr ve --acl belirtilmemişse, ditto bu ek meta-veri türlerini korumaz.

  • DITTOKEEPBINARIESPATTERN: Ortam değişkeni DITTOKEEPBINARIESPATTERN ayarlanmışsa, ditto bu düzenli ifadeyle eşleşen dosyaları saklar. Bu, --keepBinariesPattern seçeneğinin davranışıyla eşleşir.

  • DITTOKEEPBINARIESDIR: Varsayılan olarak ditto, orijinal dosyayı değiştirilen dosyanın yanında saklar. DITTOKEEPBINARIESDIR ortam değişkeni ayarlanmışsa ditto, saklanan dosyaları belirtilen dizin yoluna taşır. Dosyalar rastgele bir UUID olarak yeniden adlandırılır ve dizin dengeli tutulur.

  • DITTO_TEST_OPTIONS: DITTO_TEST_OPTIONS değeri 1 olarak ayarlanmışsa ditto, seçenekler sözlüğünün içeriği de dahil olmak üzere her kaynak ve hedef çifti için BOMCopierCopyWithOptions fonksiyonuna geçirilecek parametreleri yazdırır. Ardından herhangi bir kopyalama işlemi gerçekleştirmeden çıkar.

Hatalar (Bugs)

ditto, dizinleri dizinlerin içine cp(1) ile aynı şekilde kopyalamaz. Özellikle:

ditto foo bar

foo içeriğini bar içine kopyalarken:

cp -r foo bar

foo dizininin kendisini bar içine kopyalar. Bu durum bir hata (bug) olmasa da bazıları bunu hata benzeri bir davranış olarak görebilir. Arşiv dışı kopyalamalar için --keepParent bu sorunu nihayetinde hafifletecektir.

Ayrıca Bkz.

bom(5), lsbom(8), mkbom(8), cpio(1), zip(1), gzip(1), bzip2(1), tar(1)

Tarihçe

ditto ilk olarak Mac OS X 10.0 ile ortaya çıkmıştır.