Synopsis
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
Description
İ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'nun 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'nun 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. ditto 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) (ancak dizin sabit bağlarını değil) korur ve 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 bir takma adı (alias) olarak ortamda (environment) ayarlanabilir. Ancak her bir seçenek ayrı ayrı açılıp kapatilebilir; daha fazla ayrıntı için SEÇENEKLER bölümüne bakın.
Options
-h, --help: Tam kullanımı yazdırın.-v: Kopyalanan her kaynak dizini için stderr'e bir çıktı satırı yazdırın.-V: Kopyalanan her dosya, sembolik bağ ve aygıt için stderr'e bir çıktı satırı yazdırın.-X: Bir veya daha fazla kaynak dizini kopyalarken, farklı bir aygıt kimliğine (device ID) sahip dizinlerin içine inmeyin.-c: Hedef yolda bir arşiv oluşturun. -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şturun.-j: bzip2(1) sıkıştırmasını kullanarak sıkıştırılmış CPIO arşivleri oluşturun.-x: Kaynak argümanları olarak verilen arşivleri ayıklayın. -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şturun veya ayıklayın. PKZip arşivleri, adları .zip ile biten dosyalarda saklanmalıdır.--keepParent: Bir arşiv oluştururken, üst dizin adı src'yi dst_archive içine gömün.--arch arch: Universal ikilileri (binaries) belirtilen mimariye göre seyreltin (thin). Birden fazla --arch seçeneği belirtilirse, sonuçta oluşan hedef dosya belirtilen mimarilerin her birini içerir (eğer kaynak dosyada mevcutlarsa). mimari 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 kopyalayın.--rsrc: Kaynak çatallarını (resource forks) ve HFS meta-verilerini koruyun. 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 korumayın. Hem --norsrc hem de --rsrc geçirilirse, en son geçirilen öncelikli olur. Her iki seçenek de DITTONORSRC'yi 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 koruyun (--rsrc gerektirir). Mac OS X 10.5 sürümünden itibaren --extattr varsayılan davranıştır.--noextattr: Genişletilmiş öznitelikleri korumayın (--norsrc gerektirir).--qtn: Karantina bilgilerini koruyun. Mac OS X 10.5 sürümünden itibaren --qtn varsayılan davranıştır.--noqtn: Karantina bilgilerini korumayın.--acl: Erişim Denetim Listelerini (ACL'ler) koruyun. Mac OS X 10.5 sürümünden itibaren --acl varsayılan davranıştır.--noacl: ACL'leri korumayın.--nocache: Mac OS X Unified Buffer Cache (Birleşik Ara Bellek Önbelleği) kullanarak kopyalama yapmayın. 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ılacaktı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 olan 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ırmayın. Bu bayrak yalnızca Mac OS X 10.6 veya daha yeni sürümlerde desteklenir. Varsayılan değer --nohfsCompression'dır.
--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ı koruyacaktır. Bu bayrak yalnızca Mac OS X 10.6 veya daha yeni sürümlerde desteklenir. Varsayılan değer --preserveHFSCompression'dır.
--nopreserveHFSCompression Zaten dosya sistemi sıkıştırmasıyla sıkıştırılmış olan dosyaları kopyalarken dosya sistemi sıkıştırmasını korumayın. 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 koruyun. PKZip ayıklama işlemi bu kaynakları otomatik olarak bulacaktır.
--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'nun 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 koruyun.
--nopersistRootless Değiştirilen dosyalar için SF_RESTRICTED bayrağını veya com.apple.rootless genişletilmiş özniteliğini korumayın.
--nonAtomicCopies Mevcut dosyaları değiştirirken atomik (bütünsel) kopyalama gerçekleştirmeyin. 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ölün.
--keepBinaries Dosyaları kopyalarken ditto will set aside the original Mach-O binary when it is being replaced. 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ı saklayın. Bu dosyanın bir Mach-O ikilisi olmaması gerektiğ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 belirtin. Bu BOM dosyası yalnızca kullanıcı -o veya -l bayraklarını belirttiğinde oluşturulacaktır.--clone: Kopyalama yaparken normal dosyaları kopyalamak (clone) için girişimde bulunun.--noclone: Dosyaları kopyalamaya çalışmayın.
--option key=value Kopyalayıcıya geçirilecek isteğe bağlı bir anahtar-değer çifti belirtin. Değer bir dize (string), boolean veya tamsayı olabilir. Boolean değerler 'true', 'false', 'yes' veya 'no' olarak belirtilebilir.
Örnekler
Komut:
ditto src_directory dst_directory
src_directory içeriğini dst_directory içine kopyalar; dst_directory zaten mevcut değilse oluşturur.
Komut:
ditto src_directory dir/dst_directory
src_directory içeriğini dir/dst_directory içine kopyalar; dir ve dst_directory zaten mevcut değilse oluşturur.
Komut:
ditto src-1 ... src-n dst_directory
tüm kaynak dizinlerin içeriklerini dst_directory içine kopyalar; dst_directory zaten mevcut değilse oluşturur.
Komut:
ditto --arch ppc universal_file thin_file
universal_file içeriğini thin_file içine kopyalar; yürütülebilir kodu çalışma anında sadece ppc olacak şekilde seyreltir.
Komut:
ditto -c --norsrc Scripts -|ssh rhost ditto -x --norsrc - ./Scripts
Scripts dizinini, her türlü kaynağı veya meta-veriyi atlayarak rhost makinesine kopyalar.
Komut:
pax -f archive.cpio
archive.cpio CPIO arşivindeki dosyaları listeler.
Komut:
pax -zf archive.cpgz
archive.cpgz sıkıştırılmış CPIO arşivindeki dosyaları listeler.
Komut:
ditto -c -k --sequesterRsrc --keepParent src_directory archive.zip
Finder'ın Sıkıştır (Compress) işlevine benzer şekilde bir PKZip arşivi oluşturur.
Komut:
unzip -l archive.zip
archive.zip PKZip arşivindeki dosyaları listeler.
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ılacaktı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ı yapacaktır.
DITTONORSRC DITTONORSRC ayarlanmışsa ancak --rsrc, --extattr ve --acl belirtilmemişse, ditto bu ek meta-veri türlerini korumayacaktır.
DITTOKEEPBINARIESPATTERN Ortam değişkeni DITTOKEEPBINARIESPATTERN ayarlanmışsa, ditto bu düzenli ifadeyle eşleşen dosyaları saklayacaktır. Bu, --keepBinariesPattern seçeneğinin davranışıyla eşleşir.
DITTOKEEPBINARIESDIR Varsayılan olarak ditto, orijinal dosyayı değiştirilen dosyanın yanında saklayacaktır. DITTOKEEPBINARIESDIR ortam değişkeni ayarlanmışsa ditto, saklanan dosyaları belirtilen dizin yoluna taşıyacaktır. Dosyalar rastgele bir UUID olarak yeniden adlandırılacak ve dizin dengeli tutulacaktır.
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ıracaktır. Ardından herhangi bir kopyalama işlemi gerçekleştirmeden çıkacaktır.
Hatalar (Bugs)
ditto, dizinleri dizinlerin içine cp(1) ile aynı şekilde kopyalamaz. Özellikle: ditto foo bar foo'nun içeriğini bar'ın içine kopyalarken; cp -r foo bar foo'nun kendisini bar'ın 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
macOS 14.0 March 29, 2023 macOS 14.0