POSIXly, आप विकल्प के paxसाथ रीड + राइट मोड में उपयोग करेंगे -l:
pax -rwlpe -s /A/B/ dirA .
( -peफाइलों की सभी संभावित विशेषताओं को सुरक्षित रखता है (इस मामले में केवल निर्देशिकाएं) जो कॉपी की जाती हैं, जैसे कि GNU cpकी -aहै)।
अब, हालांकि मानक , वह आदेश बहुत पोर्टेबल नहीं है ।
सबसे पहले, कई GNU / लिनक्स-आधारित सिस्टम paxडिफ़ॉल्ट रूप से शामिल नहीं होते हैं (भले ही यह एक गैर-वैकल्पिक POSIX उपयोगिता हो)।
फिर, कई कार्यान्वयन के साथ बग और गैर-अनुरूपता उस कोड के साथ कई मुद्दों का कारण बनते हैं।
- बग के कारण, Solaris 10
pax(कम से कम) के -rwlसाथ संयोजन में उपयोग करते समय काम नहीं करता है -s। किसी कारण से, ऐसा लगता है कि यह मूल और प्रतिलिपि किए गए पथ दोनों के प्रतिस्थापन को लागू करता है। इसलिए, इसके link("dirB/file", "dirB/file")बजाय , यह कुछ करने की कोशिश करेगा link("dirA/file", "dirB/file")।
- FreeBSD पर,
paxटाइप सीमलिंक (POSIX द्वारा अनुमत व्यवहार) की फ़ाइलों के लिए हार्डलिंक नहीं बनाता है । इतना ही नहीं, लेकिन यह सिम्बलिंक के लक्ष्यों के प्रतिस्थापन ( पोसिक्स द्वारा अनुमति नहीं दिया गया व्यवहार ) पर भी लागू होता है । तो उदाहरण वहाँ एक है कि अगर के लिए foo -> AAमें सिमलिंक dirA, यह हो जाएगा foo -> BAमें dirB।
इसके अलावा, यदि आप ऐसा ही करना चाहते हैं, लेकिन मनमाने फ़ाइल पथों के साथ जिनकी सामग्री में संग्रहीत है, $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।
यह ध्यान रखना दिलचस्प है कि paxPOSIX द्वारा tarऔर cpioकमांड की विशेषताओं को मर्ज करने के लिए बनाया गया था ।
cpioPOSIX आविष्कार के विपरीत एक ऐतिहासिक यूनिक्स कमांड (1977 से) है, और एक GNU कार्यान्वयन भी है (एक नहीं pax)। तो भले ही यह एक मानक कमांड नहीं है (हालांकि यह SUSv2 में था), यह अभी भी बहुत आम है, और इसमें उन विशेषताओं का एक मुख्य समूह है, जिन पर आप आमतौर पर भरोसा कर सकते हैं।
के बराबर pax -rwlहोगा cpio -pl। हालाँकि:
cpio तर्कों पर विरोध के रूप में इनपुट फ़ाइल की सूची लेता है (newline सीमांकित जिसका अर्थ है कि 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, FreeBSD पर,cp -aहार्डलिंक सिमलिंक को पसंद नहीं करता है।