tar - ডিরেক্টরি কাঠামো নিষ্কাশন


34

unzipএকটি নিফটি বিকল্প রয়েছে -j, যার মাধ্যমে আর্কাইভের ডিরেক্টরি কাঠামোটি বাতিল করা হয় এবং সমস্ত ফাইল একই ডিরেক্টরিতে বের করা হয়।

tarএকইভাবে কাজ করার কোনও উপায় আছে কি ? ম্যান পৃষ্ঠায় কোনও কিছুই এটি সূচিত করে বলে মনে হচ্ছে না।

সুতরাং, সেখানে একটি বিকল্প, পছন্দসইভাবে ফ্রি সফটওয়্যার, এমন একটি সরঞ্জাম রয়েছে যা তা করবে?


উত্তর:


79

জিএনইউ টার ফিচারুলাইটিসে বাস করে, তাই স্বাভাবিকভাবেই এর জন্য কিছু বিকল্পও রয়েছে।
http://www.gnu.org/software/tar/manual/html_node/transform.html

আপনি যদি কয়েকটি পথের অংশগুলি সরাতে চান, তবে --strip-components=nবা --strip=nপ্রায়শই করবেন:

 tar xvzf tgz --strip=1

এটাও ফাইল নিষ্কাশিত করা (ফ্ল্যাগ হয় Regex-পুনর্লিখন সম্ভব --transformবা --xformসঙ্গে ereg গ্রহণ /xmodifer):

 tar xvzf tgz --xform='s#^[^/]+#.#x'
                 # or 's#^.+/##x' for discarding all paths

একটি ট্যারি তালিকাভুক্ত করার জন্য আপনার অতিরিক্ত --show-transformedবিকল্পের প্রয়োজন :

 tar tvzf tgz --show-transformed --strip=1 --xform='s/abc/xyz/x'

আমি বিশ্বাস করি যে পুনর্লিখনের বিকল্পগুলি কেবল উত্তোলনের জন্য নয়, প্যাকিংয়ের জন্যও কাজ করে। কিন্তু paxস্পষ্টত একটি nicer সিনট্যাক্স হয়েছে।


4
কেন হবে না s#.*/##?
l0b0

3
- স্ট্রিপ সবেমাত্র আমার দিন তৈরি করেছে। ধন্যবাদ!
স্যামস্টেফেনস

--stripওএস এক্স টার ম্যান পৃষ্ঠায় উল্লেখ করা হয়নি, তবে এটি যাইহোক কার্যকর হয়, ধন্যবাদ!
এসএফএফ

3
গৃহীত উত্তরের চেয়ে অনেক ভাল।
ক্লায়াতু ভন শ্ল্যাকার

--stripএবং এর মধ্যে কোন পার্থক্য আছে --strip-components?
জোয়েল বার্কলে

13

আপনি এটি দুটি পদক্ষেপে মোটামুটি সহজেই করতে পারেন। প্রয়োজনীয় হিসাবে অভিযোজিত:

$ mkdir /tmp/dirtree
$ tar xfz /path/to/archive -C /tmp/dirtree
$ find /tmp/dirtree -type f -exec mv -i {} . \;
$ rm -rf /tmp/dirtree

এইভাবে আমি এটি করব ( find -exec mv -iপরিবর্তে ব্যবহার করে find | xargs) .... সহজ পদক্ষেপগুলি আমার জন্য এটি করার জন্য কোনও স্ক্রিপ্ট না নিয়ে আমি কোনও সিস্টেমে পুনরাবৃত্তি করতে পারি।
কোয়াকোট কোয়েক্সোট

1
tmpdir=$( mktemp -d )অস্থায়ী ডিরেক্টরিগুলি তৈরি করার সময় +1, সহজেই কার্যকর হয়
সোরকি

8

pax এটা করতে পারেন:

pax -v -r -s '/.*\///p' < archive.tar

অথবা

zcat archive.tar.gz | pax -v -r -s '/.*\///p'

-rবিকল্পটি বাদ দিয়ে আপনি প্রথমে নাম প্রতিস্থাপনের কাজটি পরীক্ষা করতে পারেন ।


1

একটি সম্ভাব্য সমাধান যা কোনও কিছু ইনস্টল করার প্রয়োজন নেই।

  1. tar tvfটার্বল থেকে সমস্ত ফাইল দখল করতে একটি ব্যবহার করুন
  2. Files ফাইলগুলি পৃথকভাবে এক্সট্রাক্ট করুন - স্টাডআউটে টর এক্সট্রাক্ট থাকতে হবে এবং name ফাইলের নামে পুনঃনির্দেশ করুন

    tar -tvf $1 | grep -v "^d" | \
                  awk '{for(i=6;i<NF+1;i++) {printf "%s ",$i};print ""}' |\
                  while read filename
                  do
                     tar -O -xf $1 "$filename" > `basename "$filename"`
                  done
    

extract.sh হিসাবে সংরক্ষণ করুন এবং হিসাবে চালানো extract.sh myfile.tar। এটি টারবাল থেকে টানা ডিরেক্টরিতে যে কোনও সদৃশ ফাইলের নামগুলিও মুছে ফেলা হবে।


প্রকৃতপক্ষে আমি এটি বাড়ির কয়েকটি দির গাছে পরীক্ষা করেছি এবং এটি ফাঁকা স্থান উপস্থিত ফাইলগুলিতে ব্যর্থ। আমি আপডেট পোস্ট করতে না পারবো কিনা তা দেখতে পাচ্ছি।
ডেভপ্যারিলো

এটি স্থির করা, তবে এটি যতটা সুন্দর ছিল তেমন সুন্দর নয়।
ডেভপ্যারিলো

-1
tar xf foo.tar.gz foo/path/to/file/bar.mp3 -O > bar.mp3

-Oবিকল্প মান আউট করার জন্য একটি ফাইল নিষ্কাশন করে এবং >একটি ফাইলে পুনঃনির্দেশ যে আউটপুট। সুতরাং আমার উদাহরণে আমি foo.mp3 এক্সট্র্যাক্ট করছি এবং এটিকে বার.এমপি 3 এ পুনঃনির্দেশ করছি। ফাইলের নামগুলি নির্বিচারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.