উত্তর:
এই কাজ করা উচিত:
mkdir pretty_name && tar xf ugly_name.tar -C pretty_name --strip-components 1
-C
আনপ্যাক করার আগে (বা প্যাকিং) নির্দিষ্ট ডিরেক্টরিতে পরিবর্তন। --strip-components
সংরক্ষণাগারে সঞ্চিত ফাইলের নাম থেকে ডিরেক্টরিগুলির নির্দিষ্ট নম্বর সরিয়ে দেয়।
মনে রাখবেন যে এটি সত্যই বহনযোগ্য নয়। জিএনইউ টার এবং কমপক্ষে কিছু বিএসডি টারগুলির --strip-components
বিকল্প রয়েছে তবে অন্যান্য ইউনিক্সের মতো প্ল্যাটফর্মে উপস্থিত বলে মনে হচ্ছে না।
এটি করার বোবা উপায় যদিও বেশিরভাগ জায়গায় কাজ করবে।
tar xf ugly_name.tar && mv ugly_name pretty_name
tar -xvf /tmp/backupfiles.tar -C /var/www/
mv ugly-* pretty_name
ugly_name
ডিরেক্টরি থাকলে বোবা উপায় কাজ করে না । যাইহোক, সৌন্দর্য দর্শকের চোখে পড়ে।
সঙ্গে গনুহ আলকাতরা ≥1.16, ব্যবহার --transform
(রূপান্তর সংরক্ষণাগারে সম্পূর্ণ পাথ উপর প্রয়োগ করা হয়) প্রতিটি ফাইল নামে একটি sed regexp রূপান্তর প্রয়োগ করতে:
tar xf foo.tar --transform 's!^ugly_name\($\|/\)!pretty_name\1!'
যদি ugly_name
সংরক্ষণাগারটিতে থাকা সমস্ত ফাইলের নামের শীর্ষস্থানীয় উপাদান হয়, আপনাকে সুনির্দিষ্ট মিলের সাথে বিরক্ত করার দরকার নেই:
tar xf foo.tar --transform 's/ugly_name/pretty_name/'
আপনি যদি শীর্ষস্থানীয় ডিরেক্টরিটির নাম জানেন না, আপনি তারপরেও পছন্দ করতে পারেন তবে আপনি এই পদ্ধতিটি এখনও ব্যবহার করতে পারেন --strip-components
।
tar xf foo.tar --transform 's!^[^/]\+\($\|/\)!pretty_name\1!'
এর সাথে pax
, পসিক্স সংরক্ষণাগার ইউটিলিটিটি -s
বিকল্পটি ব্যবহার করুন যা একটি আর্গুমেন্ট হিসাবে সিডের মতো প্রতিস্থাপনের অভিব্যক্তি গ্রহণ করে।
pax -rf foo.tar -s '!^ugly_name\($\|/\)!pretty_name\1!'
pax -rf foo.tar -s '/ugly_name/pretty_name/'
pax -rf foo.tar -s '!^[^/]\+\($\|/\)!pretty_name\1!'
এটা ব্যবহার কর :
tar -xvf ugly_name.tar
mv ugly_name pretty_name
&&
এই দুটি কমান্ডের মধ্যে তালিকা অপারেটর ব্যবহার করতে পছন্দ করতে পারেন , তাই দ্বিতীয়টি কেবল তখনই কার্যকর হয় যদি প্রথমটি সফল হয়।
ugly_name
ইতিমধ্যে বিদ্যমান থাকে তবে এর অনাকাঙ্ক্ষিত পরিণতি হতে পারে ।
সহজ উপায়
tar xvf dml/ugly_name.tar --one-top-level=pretty_name --strip-components 1
--one-top-level=pretty_name
ছাড়া --strip-components 1
। (২) বিপরীতে, গৃহীত উত্তর (মাদুর দ্বারা পোস্ট করা)--strip-components 1
ছাড়া বৈশিষ্ট্যগুলি রয়েছে --one-top-level=pretty_name
। (৩) আপনার উত্তরগুলি, কেন এই বিকল্পগুলির সংমিশ্রণটি কোনও প্রবীণদের চেয়ে ভাল বলে আপনি ব্যাখ্যা করতে পারেন? মন্তব্যে প্রতিক্রিয়া জানাতে দয়া করে; আপনার উত্তরটি আরও পরিষ্কার এবং আরও পরিপূর্ণ করতে সম্পাদনা করুন।
--strip-component 1
প্রয়োজন হয় পদ্ধতি mkdir
বা --strip-components 1
পদ্ধতি সহ, অন্যথায় আপনি কেবল পান pretty_name/ugly_name/
।
জিজ্ঞাসা উবুন্টু থেকে, এই উত্তরটি আমার পক্ষে কাজ করেছে:
tar zxvf ugly_name.tgz --one-top-level=pretty_name
`--One-টপ লেভেল [= Dir]
এক্সট্রাকশন ডিরেক্টরিটির নীচে একটি নতুন ডিরেক্টরি তৈরি করতে টারকে বলে (বা একটিটি `-C 'তে চলে গেছে) এবং টারবম্বগুলির বিরুদ্ধে রক্ষা করতে এটি ব্যবহার করুন use দির যুক্তির অনুপস্থিতিতে, নতুন ডিরেক্টরিটির নাম সংরক্ষণাগারটির মূল নামের সমান হবে (ফাইলের নাম বিয়োগের সংরক্ষণাগার প্রত্যয়টি যদি স্বীকৃত হয়)। যে ডিরেক্টরি সদস্যের নামের সাথে শুরু হয় না এমন কোনও সদস্যের নাম (`--transfor 'এবং` - স্ট্রিপ-উপাদানগুলি' র পরিবর্তনের পরে) এর সাথে উপসর্গ করা হবে। স্বীকৃত ফাইল নামের প্রত্যয়গুলি হ'ল tar .tar 'এবং যে কোনও সংকোচনের প্রত্যয় দেখুন -অটো-সংক্ষেপণের দ্বারা সনাক্তযোগ্য ।
মন্তব্যে নির্দেশিত হিসাবে , এই পদ্ধতিটি সংরক্ষণাগারগুলির জন্য কার্যকরভাবে কাজ করে না যা সঠিকভাবে গঠন করা হয়, তবে অন্য উত্তর হিসাবে দেখা যায়, আপনার --strip-components 1
সত্যিকারের কাজ করার জন্য এটি যুক্ত করা উচিত । আমি এই নতুন বিকল্পটি দিয়ে পরীক্ষা করেছি এবং এটি শীর্ষ স্তরের নাম এবং বাদে সংরক্ষণাগারগুলির জন্য উভয়ই কাজ করে।
pretty_name
যার মধ্যে মূল শীর্ষ স্তরের ডিরেক্টরি রয়েছে। উদাহরণস্বরূপ, যদি tar xzf ugly_name.tgz
কোনও ডিরেক্টরি বলা হয় ugly_name/
, তবে আপনার প্রদত্ত কমান্ডটি তৈরি করবে pretty_name/ugly_name/
।