প্যাসিকলি, আপনি pax
এই -l
বিকল্পটি সহ রিড + রাইটিং মোডে ব্যবহার করবেন :
pax -rwlpe -s /A/B/ dirA .
( -pe
(সব ফাইল সম্ভব বৈশিষ্ট্যাবলী এই ক্ষেত্রে শুধুমাত্র ডিরেক্টরি) যে অনুলিপি করা অপরিবর্তিত, গনুহ মত cp
'র -a
না)।
এখন, যদিও মান , তবুও কমান্ড খুব পোর্টেবল হয় না ।
প্রথমত, অনেকগুলি জিএনইউ / লিনাক্স-ভিত্তিক সিস্টেম pax
ডিফল্টরূপে অন্তর্ভুক্ত করে না (যদিও এটি একটি অ-alচ্ছিক POSIX ইউটিলিটি)।
তারপরে, কয়েকটি বাস্তবায়ন সহ বেশ কয়েকটি বাগ এবং অ-কনফর্মেন্সগুলি সেই কোডটি নিয়ে বেশ কয়েকটি সমস্যা সৃষ্টি করে।
- ত্রুটির কারণে, সোলারিস 10
pax
(কমপক্ষে) এর -rwl
সাথে সংমিশ্রণে ব্যবহার করার সময় কাজ করে না -s
। কোনও কারণে, মনে হয় এটি মূল এবং অনুলিপি উভয় পথেই বিকল্প প্রয়োগ করে। সুতরাং উপরে, এটি link("dirB/file", "dirB/file")
পরিবর্তে কিছু করার চেষ্টা করবে link("dirA/file", "dirB/file")
।
- FreeBSD 'র উপর,
pax
ধরনের ফাইলের জন্য hardlinks তৈরি করে না সিমবলিক লিঙ্ক (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
নতুন লাইনের চরিত্রগুলিতে যদি নিখুঁত পথটি শেষ হয় তবে ব্যর্থ হবে )।
এখন এটি জিএনইউ / লিনাক্স সিস্টেমগুলিতে সহায়তা করবে না যেখানে নেই pax
।
এটি লক্ষণীয় আকর্ষণীয় যে pax
এটি পসিক্স দ্বারা তৈরি tar
এবং cpio
কমান্ডের বৈশিষ্ট্যগুলিকে মার্জ করার জন্য তৈরি করেছিল ।
cpio
পসিক্স আবিষ্কারের বিপরীতে একটি historical তিহাসিক ইউনিক্স কমান্ড (1977 সাল থেকে), এবং একটি জিএনইউ বাস্তবায়নও রয়েছে ( pax
একটিও নয়)। সুতরাং এটি আর কোনও স্ট্যান্ডার্ড কমান্ড না থাকলেও (এটি যদিও SUSv2 তে ছিল) তবে এটি এখনও খুব সাধারণ এবং আপনি সাধারণত নির্ভর করতে পারেন এমন বৈশিষ্ট্যের একটি মূল সেট রয়েছে।
সমতুল্য pax -rwl
হবে cpio -pl
। যাহোক:
cpio
আর্গুমেন্টের বিপরীতে স্টিডিনে ইনপুট ফাইলের তালিকা গ্রহণ করে (নিউলাইন সীমানা যার অর্থ নতুন লাইনের অক্ষরযুক্ত ফাইলের নাম সমর্থিত নয়)
- সমস্ত ফাইল নির্দিষ্ট করতে হবে (সাধারণত আপনি এটিকে আউটপুট খাওয়ান
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
, ফ্রিবিএসডি-তেcp -a
লাইকগুলি হার্ডলিঙ্ক করে না m