একক টর কল দিয়ে একাধিক .tar.gz ফাইলগুলি বের করুন


35

আমি ভাবছিলাম যে (এবং অবশ্যই তা কীভাবে) tarএকক দৌড়ে একাধিক ফাইল বের করতে বলা সম্ভব ?

আমি বেশ কয়েক বছর ধরে অভিজ্ঞ ইউনিক্স ব্যবহারকারী এবং অবশ্যই আমি জানি যে আপনি যে আর্কাইভটি বের করতে চান তার জন্য একবার কল করতে আপনি ব্যবহার করতে পারেন forবা এই জাতীয় findজিনিসগুলি ব্যবহার করতে পারেন tar, তবে আমি একটি ওয়ার্কিং কমান্ড লাইন নিয়ে আসতে পারিনি যে কারণে আমার tarএকবারে দুটি .tar.gz ফাইল আহরণ করতে। (এবং না, এতে কোনও ভুল নেই for, আমি কেবল জিজ্ঞাসা করছি এটি ছাড়া এটি করা সম্ভব কিনা))

আমি কৌতূহল ছাড়াই এই প্রশ্নটি জিজ্ঞাসা করছি, সম্ভবত

  • tarএটি সমর্থন করে কোথাও একটি অদ্ভুত কাঁটা আছে
  • আমার চেষ্টা করার সময় কেউ আমাকে -Mযে পরামিতিটি tarপ্রস্তাব করেছিল তা কীভাবে ব্যবহার করতে হয় তা কেউ জানেনtar -zxv -f a.tgz -f b.tgz
  • আমরা সবাই অন্ধ হন এবং এটা করতে সম্পূর্ণভাবে সহজ - কিন্তু আমি যে কাজে লাগাতে করা হয়নি ওয়েব কোনো ইঙ্গিত খুঁজে পাইনি forবা findবা xargsমত বা।

দয়া করে সাথে উত্তর দেবেন না tar -zxvf *.tar.gz(কারণ যে আছে না কর্মস্থল) এবং শুধুমাত্র উত্তরের সাথে আপনি এটি সম্পর্কে একেবারে নিশ্চিত "কাজ করে না" (এবং হয়ত একটি ভাল ব্যাখ্যা আছে কেন , খুব)।

সম্পাদনা: স্ট্যাক ওভারফ্লো সম্পর্কে এই প্রশ্নের উত্তরের দিকে আমার দিকে ইঙ্গিত করা হয়েছিল যা দুর্দান্তভাবে বলে যে বর্তমান tarসিনট্যাক্স না ভাঙা সম্ভব নয় , তবে আমি সত্য বলে মনে করি না। ব্যবহার করে tar -zxv -f a.tgz -f b.tgzবা tar -zxv --all-args-are-archives *.tar.gzকোনও বিদ্যমান বাক্য গঠন ভাঙ্গবে না, তবে।


কৌতূহলের বাইরে, এমন কোনও পরিস্থিতি যা আপনাকে কীভাবে লুপিং নির্মাণ এড়াতে হবে তা নিয়ে ভাবতে শুরু করেছিল?
চাচাজমিল

1
এফওয়াইআই: জিএনইউ ট্যার প্যারামিটারের সাহায্যে মাল্টি-ভলিউম ট্যুর সংরক্ষণাগারগুলিকে সমর্থন করে -M
স্টিভ-ও

1
চাচাজমিল: আমি একটি হাওটো লিখছি এবং এর একটি পদক্ষেপের মধ্যে বেশ কয়েকটি সংক্ষেপিত ফাইল (.tar.bz2, .tar.gz, .zip) আনপ্যাক করা জড়িত। এবং যেহেতু এটি একটি হাওটো, আমি ভাবছিলাম যে এটি করার জন্য সবচেয়ে মার্জিত কমান্ড লাইনটি কী হবে। :)
scy

উত্তর:


39

এটি সম্ভব, বাক্য গঠনটি বেশ সহজ:

$ cat *.tar | tar -xvf - -i

-I বিকল্পটি ম্যান পৃষ্ঠা থেকে ট্যারি সংরক্ষণাগারটির শেষে ইওএফটিকে উপেক্ষা করে:

-i, --ignore-zeros
ignore blocks of zeros in archive (normally mean EOF)

1
এটা আমার জন্য কাজ বলে মনে হয়েছিল। সঠিক কমান্ড আমি ব্যবহার করা হয়েছে: cat *.tar.bz2 | tar -ixjv। ধন্যবাদ!
scy

1
<টিজিজেডের জন্য> বিড়াল * .টিজিজেড | tar -xzvf - * .tgz এ ফাইলের জন্য -i -C / গন্তব্য / <বা>; tar -xzvf do ফাইল-সি / গন্তব্য / করুন; সম্পন্ন
ফেরোও

27

* .tar.gz এর জন্য

for file in *.tar.gz; do tar -zxf "$file"; done

* .tar.bz2 এর জন্য

for file in *.tar.bz2; do tar -jxf "$file"; done

* .tar.xz এর জন্য

for file in *.tar.xz; do tar -Jxf "$file"; done

1
এখানে ফর্ম্যাটিংটি ঠিক করুন এবং এটি আরও পঠনযোগ্য।
eyoung100

এটা অসাধারণ. ফর্ম্যাটটিও দুর্দান্ত কারণ এটি টার্মিনালে কেমন দেখায়
স্ম্যাথহেনগ্লিশ

1
$fileআপনার ফাইলে ফাঁকা জায়গাগুলির নাম থাকলে চারপাশে উদ্ধৃতি দিতে ভুলবেন না ।
আলেকজান্ডার রেভো 13

এটি কেবলমাত্র একক দাবির সাহায্যে একাধিক সংরক্ষণাগার আহরণ করা সম্ভব কিনা এই প্রশ্নের উত্তর দেয় না। তদ্ব্যতীত, ব্যবহারকারী বলছেন যে তারা ফাইলগুলির সেটগুলিতে পুনরাবৃত্তি করতে লুপগুলি কীভাবে ব্যবহার করবেন সে সম্পর্কে তারা ইতিমধ্যে পরিচিত।
কুসালানন্দ

2

আপনাকে একটি লুপ ব্যবহার করতে হবে। tarএকাধিক -fবিকল্পের অনুমতি দেওয়ার জন্য এটি কমান্ড লাইন সিনট্যাক্সটি ভঙ্গ করবে না , তবে এটির জন্য ধরণের বিভিন্ন ধরণের শর্তাদি সহ একাধিক সংরক্ষণাগারকে ক্রমানুসারে প্রসারণের জন্য কোডের প্রয়োজন হবে (মাঝখানে কোনও সংরক্ষণাগারটি যদি ত্রুটিযুক্ত হয় তবে কী ঘটে? আর্কাইভগুলি আলাদাভাবে ব্যবহার করতে পারে? সংকোচন প্রক্রিয়া? আপনার কি একাধিক -Cবিকল্প থাকতে পারে (একটি নির্দিষ্ট ডিরেক্টরিতে এক্সট্রাক্ট করার জন্য জিএনইউ টার বিকল্প), কী? -কি (কোনও নির্দিষ্ট সদস্যের নাম থেকে শুরু করার জন্য জিএনইউ টার অপশন)?…)।

forলুপ এড়ানো একটি সম্ভাবনা হ'ল AVF ইনস্টল করা এবং সক্রিয় করা , একটি FUSE ফাইল সিস্টেম যা সংরক্ষণাগারগুলিতে স্বচ্ছ অ্যাক্সেস সরবরাহ করে। প্রতিটি সংরক্ষণাগার /path/to/archiveডিরেক্টরি হিসাবে দ্বিগুণ হয় ~/.avfs/path/to/archive#। আপনি যদি ওয়াইল্ডকার্ডের সাথে সংরক্ষণাগারগুলি মেলাতে চান তবে #একটি ওয়াইল্ডকার্ডের ম্যাচে এটি যুক্ত করার বাধা আছে ; এটি zsh এ করা যেতে পারে।

mountavfs
cp -p ~/.avfs$PWD/{a,b}.tgz\#/* /destination
cp -p ~/.avfs/path/to/source/*.tgz(e\''REPLY=$REPLY\#'\')/* /destination

-1

find . -name "*.tar.gz" -exec tar xzf {} \;



1
এটি প্রতিটি পাওয়া ফাইলের জন্য একবার অন্তর্নিহিত লুপ কলিং টার প্রবর্তন করে এবং ব্যবহারকারী বলে যে তারা ইতিমধ্যে এটি কীভাবে করতে হয় তা জানে।
কুসালানন্দ

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