POSIXly seçeneği paxile okuma + yazma modunda kullanırsınız -l:
pax -rwlpe -s /A/B/ dirA .
( -peGNU gibi, kopyalanan bu durumda tüm dosyaları olası özellik (sadece dizinleri) korur cp'ın -ayapar).
Şimdi, standart olsa da , bu komut mutlaka çok taşınabilir değildir .
İlk olarak, çoğu GNU / Linux tabanlı sistem paxvarsayılan olarak içermez (isteğe bağlı olmayan bir POSIX yardımcı programı olmasına rağmen).
Daha sonra, birkaç uygulamayla birlikte bazı hatalar ve uygunsuzluklar bu kodla ilgili bir takım sorunlara neden olmaktadır.
- bir hata nedeniyle, Solaris 10
paxkullanıldığında (en azından) çalışmıyor -rwlile kombinasyon halinde -s. Bazı nedenlerden dolayı ikame işlemi hem orijinal hem de kopyalanmış yola uygular. Yani yukarıda, link("dirB/file", "dirB/file")yerine bazı yapmaya çalışacaktı link("dirA/file", "dirB/file").
- FreeBSD'de symlink
pax türündeki dosyalar için hardlinks oluşturmaz (POSIX tarafından izin verilen bir davranış). Sadece bu değil, ama aynı zamanda yollarda bazı hedeflere ikame (bir davranışı uygular değil POSIX tarafından izin verilir). Yani bir varsa örneğin symlink içinde , bu olacak içinde .foo -> AAdirAfoo -> BAdirB
Ayrıca, aynı şeyi ancak içeriğinde depolanan $srcve rasgele dosya yollarıyla yapmak istiyorsanız , içerideki tam dizin yapısını (var olması ve bir dizin olması gerektiğini) yarattığını $dstanlamak önemlidir . Örneğin, eğer bir halde, oluşturulur.pax -rwl -- "$src" "$dst"$src$dst$srcfoo/bar$dst/foo/bar
Bunun yerine, $dstbir kopyasını olmak istiyorsanız $src, en kolay muhtemelen olarak yapmaktır:
absolute_dst=$(umask 077 && mkdir -p -- "$dst" && cd -P -- "$dst" && pwd -P) &&
(cd -P -- "$src" && pax -rwlpe . "$absolute_dst")
(Bu aynı zamanda yukarıda belirtilen sorunların çoğunun etrafında da çalışacaktır ancak $dstyeni satır karakterlerinde mutlak sonlar sona ererse başarısız olur ).
Şimdi bu, GNU / Linux sistemlerinde hiçbir şeyin olmadığı yerlerde yardımcı olmaz pax.
Ve komutlarının paxözelliklerini birleştirmek için POSIX tarafından oluşturulduğunu not etmek ilginçtir .tarcpio
cpioa, tarihsel POSIX buluşa zıt olarak (1977) Unix komut ve hem de bir GNU uygulama (bir olduğu paxbir). Bu yüzden artık standart bir komut olmasa da (SUSv2'deydi), hala çok yaygındır ve genellikle güvenebileceğiniz temel bir dizi özellik vardır.
Eşdeğeri pax -rwlolur cpio -pl. Ancak:
cpio argümanların tersine stdin'deki girdi dosyalarının listesini alır (newline ile sınırlandırılmış newline karakterleri desteklenmez.
- Tüm dosyalar belirtilmelidir (tipik olarak, bunun çıktısını beslersiniz
find( findve cpioaynı kişiler tarafından ortaklaşa geliştirilmiştir)).
- meta veriler korunmaz (bazı
cpiouygulamaların bazılarını korumaya yönelik seçenekleri vardır, ancak taşınabilir bir şey yoktur).
Yani ile cpio:
absolute_dst=$(umask 077 && mkdir -p -- "$dst" && cd -P -- "$dst" && pwd -P) &&
(cd -P -- "$src" && find . | cpio -pl "$absolute_dst")
paxFreeBSD'de olduğu gibi , bağlantıcp -alinklerinin sabit olmadığını da unutmayın.