POSIXly คุณจะใช้paxในโหมดอ่าน + เขียนพร้อม-lตัวเลือก:
pax -rwlpe -s /A/B/ dirA .
( -peเก็บรักษาคุณลักษณะทั้งหมดเป็นไปได้ของไฟล์ (ในกรณีนี้ไดเรกทอรีเท่านั้น) ที่มีการคัดลอกเช่น GNU cp's -aไม่)
ตอนนี้แม้ว่ามาตรฐานคำสั่งที่ไม่จำเป็นต้องมากแบบพกพา
เริ่มแรกระบบที่ใช้ GNU / Linux หลายระบบไม่ได้รวมอยู่ในpaxค่าเริ่มต้น (แม้ว่าจะเป็นโปรแกรมอรรถประโยชน์ POSIX ที่ไม่ใช่ตัวเลือกก็ตาม)
จากนั้นจำนวนข้อบกพร่องและการไม่สอดคล้องกับการใช้งานไม่กี่ครั้งทำให้เกิดปัญหาจำนวนหนึ่งกับรหัสนั้น
- เนื่องจากข้อผิดพลาด, Solaris 10
pax(อย่างน้อย) ไม่ทำงานเมื่อใช้ร่วมกับ-rwl -sด้วยเหตุผลบางอย่างดูเหมือนว่าจะใช้การทดแทนกับทั้งเส้นทางเดิมและเส้นทางที่คัดลอก ดังนั้นข้างต้นก็จะพยายามที่จะทำบางอย่างแทนlink("dirB/file", "dirB/file")link("dirA/file", "dirB/file")
- บน FreeBSD
paxอย่าสร้างฮาร์ดลิงก์สำหรับไฟล์ประเภทsymlink (พฤติกรรมที่อนุญาตโดย POSIX) ไม่เพียงแค่นั้น แต่ยังใช้การทดแทนกับเป้าหมายของ symlink (พฤติกรรมที่ไม่ได้รับอนุญาตจาก POSIX) ดังนั้นสำหรับตัวอย่างเช่นถ้ามีfoo -> AAsymlink ในdirAก็จะกลายเป็นในfoo -> BAdirB
นอกจากนี้หากคุณต้องการทำสิ่งเดียวกัน แต่มีเส้นทางของไฟล์ที่มีเนื้อหาจัดเก็บอยู่$srcและ$dstสิ่งสำคัญคือการตระหนักว่าการpax -rwl -- "$src" "$dst"สร้างโครงสร้างไดเรกทอรีแบบเต็มของ$srcภายใน$dst(ต้องมีอยู่และเป็นไดเรกทอรี) ตัวอย่างเช่นถ้า$srcเป็นfoo/barแล้ว$dst/foo/barจะถูกสร้างขึ้น
หากคุณต้องการ$dstเป็นสำเนาของ$srcสิ่งที่ง่ายที่สุดน่าจะเป็น:
absolute_dst=$(umask 077 && mkdir -p -- "$dst" && cd -P -- "$dst" && pwd -P) &&
(cd -P -- "$src" && pax -rwlpe . "$absolute_dst")
(ซึ่งจะแก้ไขปัญหาส่วนใหญ่ที่กล่าวถึงข้างต้น แต่จะล้มเหลวหากเส้นทางที่แน่นอนของการ$dstสิ้นสุดในตัวละครขึ้นบรรทัดใหม่)
ตอนนี้ที่จะไม่ช่วยในระบบ GNU / Linux paxที่ไม่มี
เป็นที่น่าสนใจที่จะทราบว่าpaxสร้างโดย POSIX เพื่อรวมคุณสมบัติของtarและcpioคำสั่ง
cpioเป็นประวัติศาสตร์คำสั่ง Unix (จาก 1977) เมื่อเทียบกับการประดิษฐ์ POSIX และมีการดำเนินงานของกนูเช่นกัน (ไม่ได้เป็นpaxอย่างใดอย่างหนึ่ง) ดังนั้นแม้ว่ามันจะไม่ได้เป็นคำสั่งมาตรฐานอีกต่อไป(มันอยู่ใน SUSv2) แต่มันก็ยังเป็นเรื่องธรรมดามากและมีชุดคุณสมบัติหลักที่คุณสามารถพึ่งพาได้
เทียบเท่าจะเป็นpax -rwl cpio -plอย่างไรก็ตาม:
cpio รับรายการอินพุตไฟล์บน stdin ซึ่งต่างกับอาร์กิวเมนต์ (ตัวคั่น newline ซึ่งหมายความว่าไม่สนับสนุนชื่อไฟล์ที่มีอักขระบรรทัดใหม่)
- ไฟล์ทั้งหมดจะต้องมีการระบุ (โดยทั่วไปคุณฟีดมันเอาท์พุทของ
find( findและcpioได้รับการพัฒนาร่วมกันโดยคนเดียวกัน))
- ข้อมูลเมตาไม่ได้รับการเก็บรักษาไว้ (
cpioการใช้งานบางอย่างมีตัวเลือกในการรักษาบางอย่าง แต่ไม่มีอะไรพกพาได้)
ดังนั้นด้วยcpio:
absolute_dst=$(umask 077 && mkdir -p -- "$dst" && cd -P -- "$dst" && pwd -P) &&
(cd -P -- "$src" && find . | cpio -pl "$absolute_dst")
paxกับ FreeBSDcp -aไม่ได้เชื่อมโยงไปยังฮาร์ดลิงก์