একটি টার্ক সংরক্ষণাগারে একটি ফাইল এটি বের না করে দেখুন


16

আমি টারার্ড ফাইলটির বিষয়বস্তু এটি না বের করেই দেখতে চাই, পরিস্থিতি: আমার a.tar আছে এবং ভিতরে একটি ফাইল আছে ./x/y.txt। আমি y.txtআসলে এটিকে না বের করেই এর সামগ্রী দেখতে চাই a.tar


আপনি যদি ইমাস ব্যবহার করেন তবে আপনি এটিতে কেবল টারবলটি খুলতে পারেন।
কুদিত

হ্যাঁ, এটি দেখতে আপনাকে এটিকে বের করতে হবে। আমি অনুমান করছি আপনার অর্থ কি "কোনও ফাইলের কাছে না লিখে"?
টবির স্পিড

উত্তর:


20

এটি সম্ভবত একটি জিএনইউ নির্দিষ্ট বিকল্প, তবে আপনি স্ট্যান্ডার্ড আউটপুট থেকে ফাইলগুলি বের করতে -Oবা ব্যবহার করতে পারেন--to-stdout

$ tar -axf file.tgz foo/bar -O

আহ কাজ করে, তবে আমি নতুন লাইনে আউটপুট মুদ্রণ করতে পরিচালনা করি নি। প্রাক্তন; tar -axf file.tar.gz --wildcards --no-anchored '*read_this_file*' --Oউদাহরণস্বরূপ, অনেক ফাইল মিলছে *read_this_file*। সবকিছু একই লাইনে মুদ্রিত হয়। থেকে man, আমি খুঁজে পেয়েছি --to-command। সুতরাং পাসিংটি --to-command="echo '' && cat"কিছুটা কালো যাদু তবে এটি কাজ করে: ডি
গ্যাবলেউক্স

উত্তরের জন্য কেবল $ tar -axf file.tgz foo/bar -O
এটির


4

এটি যেমন সহজ

less  a.tar:./x/y.txt

এই ম্যাজিক ট্রিকটি যদি আপনি lesspipeইনস্টল করে থাকেন এবং env ভেরিয়েবলটি LESSOPENসংজ্ঞায়িত করা হয় | /usr/bin/lesspipe.sh %sযা আপনি যদি কম পাইপ সঠিকভাবে ইনস্টল করেন তবে এটি প্রত্যাশিত works


এটি একটি দুর্দান্ত স্ক্রিপ্ট - তবে একের বেশি রয়েছে is আমি এটা বুঝতে হিসাবে, এইlesspipe.sh সম্ভবত পছন্দের দিতে হবে।
মাইকজার্ভ

এটি কি সংকুচিত টার্বলগুলিতে কাজ করবে?
টেরডন

এটা করা উচিত। তবে আমি সবেমাত্র পেয়েছি এটি উবুন্টুতে কাজ করে না। চিত্রে যান. তারা বৈশিষ্ট্যটি ভঙ্গ করেছে বা সরিয়ে দিয়েছে। আপনি এখনও কম কিন্তু ফাইল সামগ্রী নয় সংরক্ষণাগার তালিকা দেখতে পারেন :-(
solsTiCe

2

ওহ, তবে এটি একটি ফাইলের মধ্যে কোনও tarফাইলের বিষয়বস্তু সম্পর্কে একটি প্রশ্ন । এবং আসলে, কিছু ক্ষেত্রে এটি এত কঠিন নয়। জিনিসটি হ'ল, কোনও tarফাইল কেবল একটি অবরুদ্ধ স্ট্রিম ফাইল the আর্কাইভের মধ্যে থাকা প্রতিটি ফাইল তার আগেরটির পরে পাওয়া যায় এবং প্রতিটি ফাইল একটি নির্দিষ্ট ফর্ম্যাটের ভিত্তিতে মেটাডেটা শিরোনাম পায় ।

সেই ফর্ম্যাটের ভিত্তিতে আমি একবার লিখেছিলাম shitar- যা কয়েকটি লাইনের ddএবং শেল স্ক্রিপ্ট যা tarফ্লাইতে ব্লক ডিভাইসের প্রবাহকে আপ করতে পারে up একই ভিত্তিতে, খুব সম্প্রতি আমি কোডের এই কয়েকটি লাইন লিখেছি :

tar --no-recursion -c ./      |
{ printf \\0; tr -s \\0; }    |
cut -d '' -f-2,13             |
tr '\0\n' '\n\t'

... ফ্লাইতে একটি tarফাইল বাছাই এবং এর উপাদান পাঠ্য ফাইলগুলিতে ইনলাইন রূপান্তর সম্পাদনের জন্য। সেখানে cutক্ষেত্র ক্ষেত্র নির্দেশ 1,2,13 একটি NUL এর সীমায়িত লাইন ইনপুটের। এই জাতীয় জিনিসগুলি সহজ যখন tarফাইলটিতে কেবলমাত্র পাঠ্য ফাইল থাকে কারণ tarরেকর্ড ডিলিমিটারগুলি (প্রতি 512 বাইটে একবারে ঘটতে পারে) কেবলমাত্র প্রতি একক এনএলএল থেকে নিচে নামিয়ে ফেলা যায় - আপনাকে যেমন ঘটছে ততক্ষণ গণনা করার প্রয়োজন নেই।

tarএর শিরোনামের ফর্ম্যাটটি এর মতো দেখাচ্ছে:

field    offset   len
name     0        100
mode     100      8
uid      108      8
gid      116      8
size     124      12
mtime    136      12
chksum   148      8
typeflag 156      1
linkname 157      100
magic    257      6
version  263      2
uname    265      32
gname    297      32
devmajor 329      8
devminor 337      8
prefix   345      155

বুঝুন যে tarসংরক্ষণাগার বিন্যাসের আরও জটিল বিষয়গুলির সাথে সহজ অপারেশনগুলি পরিচালনা করার তুলনায় স্বাচ্ছন্দ্যের মধ্যে একটি খাড়া slাল আছে । সাধারণ জিনিসগুলি যেমন - একজাতীয়ভাবে টাইপ করা ফাইলগুলির একটি ছোট গ্রুপকে একত্রে প্যাক করা বা এমন কোনও আর্কাইভ বিভাজক করা যা কেবলমাত্র এমন সদস্য যার দ্বারা আপনি পূর্বাভাস দিতে পারেন - কয়েকটি শেল পাইপ দিয়ে সহজেই সম্পন্ন করা যায়, নির্ভরযোগ্যভাবে স্বেচ্ছাসেবী আর্কাইভ সদস্যদের পরিচালনা করা কোনও ক্ষুদ্র বিষয় নয়।

এটি বিশেষত কঠিন যখন সেই সদস্যগুলির মধ্যে নির্বিচারে বাইনারি ডেটা থাকতে পারে - যা অবশ্যই কোনও নির্ভরযোগ্য অ্যাপ্লিকেশনকে বাধা দেয় tr -s- এবং এই অসুবিধা কেবল তখনই মিশ্রণ হয় যখন আপনার নেটিভ ব্যতীত নিয়মিত এবং / অথবা চরসেট ব্যতীত বিভিন্ন ধরণের ফাইল ব্যবহৃত হয় এবং / অথবা আসল সংরক্ষণাগারটি হ্যান্ডেল করার জন্য অপ্রত্যাশিত বিন্যাসের অ্যাপ্লিকেশন আইডিয়োসিএনসিগুলি সহ একটি বাস্তবায়ন দ্বারা তৈরি করা হয়েছিল। এবং এটি কেবল tarসংরক্ষণাগার প্রকারের মৌলিক, মানিক দিকগুলিকেই স্পর্শ করছে - প্রসারিত শিরোনাম এবং ফর্ম্যাট এক্সটেনশান এবং স্পার ফাইল এবং সংকোচনের যোগ করুন ... এবং ভাল, তাদের সাথে শুভকামনা।

মূল বিষয়ে ফিরে যান, যদিও, একটি সংরক্ষণাগারটির জন্য স্ট্যান্ডার্ড রেকর্ড সাইজটি tar20 টি ব্লক - বা 10240 বাইট। স্ট্যান্ডার্ড রেকর্ড-আকারে এবং কোনও স্ট্যান্ডার্ড ফাইল টাইপ এবং স্ট্যান্ডার্ড ustarশিরোনামযুক্ত একটি সংরক্ষণাগার দেওয়া হয়েছে , যদিও, আপনাকে sizeশিরোনামের ক্ষেত্র অনুযায়ী মেম্বার-শিরোলেখ থেকে সদস্য-শিরোনামে এড়িয়ে যাওয়া উচিত, যতক্ষণ না আপনি কোনও সদস্যের সাথে মেলে এমন কোনও সদস্য খুঁজে না পান until যা আপনি সন্ধান করেন একবার উপস্থিত হলে, sizeআপনার টার্গেটের সদস্য সদস্যের শিরোনামটির লেজ থেকে অফসেট শুরু থেকে বাইটগুলি পড়ুন । এবং এটি আপনার ফাইল।

যদিও শিরোনামের উপরে এড়িয়ে যাওয়া মারাত্মক সহজ নয়। বিভিন্ন ধরণের প্রকৃত ডেটা ব্লক যুক্ত হবে বা এর সাথে মিলবে size। উদাহরণস্বরূপ, ডিরেক্টরি এবং লিঙ্কগুলিতে এমন কোনও ডেটা ব্লক থাকবে না, কেবলমাত্র একটি শিরোনামের বিবরণ থাকবে এবং সুতরাং আপনাকে অবশ্যই sizeআপনার স্কিপ সূত্রে এর ক্ষেত্রটি প্রয়োগ করা উচিত কিনা তা নিশ্চিত করার আগে আপনাকে অবশ্যই বর্তমান শিরোনামের ফাইল টাইপ যাচাই করতে প্রস্তুত থাকতে হবে ।

এছাড়াও, রেকর্ড আকার আকারের উপাদানগুলি - সংরক্ষণাগার-সদস্যদের মাপগুলি 10240 স্ট্যান্ডার্ড রেকর্ডের সাথে ভালভাবে সিঙ্ক হয় কি না তার উপর নির্ভর করে - সেখানে প্রতিটি আকারে অতিরিক্ত 0-ব্লক সংযুক্ত থাকতে পারে বা নাও থাকতে পারে। এবং রেকর্ড- সাইজটি সংরক্ষণাগার তৈরির সময় ঘোষিত হতে পারে - এবং তাই এটি মোটেও 20 টি ব্লক নাও হতে পারে, যদিও নির্দিষ্ট হিসাবে, এটি সর্বদা 512-বাইট ইউনিটে অবরুদ্ধ করা উচিত:

  • ustar
    • tarইন্টারচেঞ্জ ফরম্যাট; দেখতে বর্ধিত বর্ণনা অধ্যায়। অক্ষর বিশেষ সংরক্ষণাগার ফাইলগুলির জন্য এই ফর্ম্যাটটির জন্য ডিফল্ট ব্লকসাইজটি হবে 10240 । বাস্তবায়নের সব সহায়তা প্রদান করিবে blocksize কম মান বা এর সমান 32256 যে গুণিতক 512

সুতরাং আপনি যদি এমন কোনও tarফাইলের সাথে কাজ করছেন যা এমন ফাইলগুলিতে থাকতে পারে যাতে স্বেচ্ছাসেবী বাইনারি ডেটা থাকতে পারে তবে আপনাকে অ্যালগোরিদমিকভাবে ফাইলটির মধ্য দিয়ে এড়িয়ে যেতে হবে এবং ফাইল টাইপ অনুসারে। অনুমানটি বলে:

  • sizeক্ষেত্র অক্টেট ফাইল মাপ।
    • যদি typeflagক্ষেত্রের ধরনের হতে করার জন্য একটি ফাইল উল্লেখ সেট করা হয় 1 (ক লিংক ) বা 2 (ক সিম্বলিক লিঙ্ক ) , sizeক্ষেত্র শূন্য হিসাবে নির্দিষ্ট হবে।
    • যদি typeflagক্ষেত্র প্রকার ফাইল উল্লেখ সেট করা হয় 5 ( ডিরেক্টরি ) , sizeফিল্ড রেকর্ড ধরনের সংজ্ঞার আওতায় বর্ণনা হিসেবে ব্যাখ্যা করা হবে।
    • 1 , 2 , বা 5 ধরণের জন্য কোনও ডেটা লজিকাল রেকর্ড সংরক্ষণ করা হয় না ।
    • যদি typeflagক্ষেত্রের সেট করা হয় 3 ( চরিত্র বিশেষ ফাইল) , 4 ( বিশেষ ব্লক ফাইল) , অথবা 6 ( FIFO ) , অর্থ sizeক্ষেত্র POSIX.1-2008 এই ভলিউম দ্বারা অনির্দিষ্ট, এবং কোন তথ্য লজিক্যাল রেকর্ড হইবে মাঝারি সঞ্চিত।
    • অতিরিক্তভাবে, 6 ধরণের জন্য , sizeক্ষেত্রটি পড়ার সময় উপেক্ষা করা হবে।
  • যদি typeflagক্ষেত্রের অন্য কোন মানে সেট করা, লজিক্যাল রেকর্ডের সংখ্যা অনুসরণ হেডার হইবে লিখিত , বিভাগের ফলাফলে কোনো ভগ্নাংশ উপেক্ষা।( (size+ 511 ) / 512 )

... এবং অবশ্যই অবশ্যই প্রতিটি শিরোনামের স্বতন্ত্র আকার বিবেচনা করা - যা সদস্য প্রতি অতিরিক্ত ব্লক। সুতরাং আপনি শিরোনাম থেকে শিরোনাম পর্যন্ত পঠনযোগ্য পড়া ছেড়ে যেতে পারেন যতক্ষণ না আপনি যে শিরোনামটির সাথে সন্ধান করছেন তার সাথে একত্রে অবতীর্ণ হন, তখন আপনাকে যাচাই করতে হবে যে বর্তমান রেকর্ডটি কেবল আপনার ফাইলের সাথে একটি লিঙ্ক বা প্রকৃত ফাইলের বর্ণনা দেয় কিনা? । এটি বিশেষত প্রাসঙ্গিক কারণ কারণ যখন একই ফাইলটি একটি সংরক্ষণাগারে একাধিকবার যুক্ত করা হয় তখন অনেকগুলি tarকেবলমাত্র লিঙ্ক শিরোনামকে অন্তর্ভুক্ত করে কারণ প্রকৃত ফাইলটির ডেটা আর্কাইভের মধ্যে ইতিমধ্যে অন্য কোথাও পাওয়া যায়।

যাচাই করা হয়েছে যে আপনাকে ক্ষেত্রের জন্য আপনার গণনা প্রয়োগ করতে হবে chksumএবং আপনার মনে হয় যে ফাইলটি আপনার মনে হয় যা আসলে আপনার সর্বোপরি চান ফাইল is tarএর chksumমোটামুটি সহজ though- হল:

  • cksum
    • chksum1991 হেডার যৌক্তিক রেকর্ডে সব অক্টেট সহজ সমষ্টি অকট্যাল মান মান IRV উপস্থাপনা: ক্ষেত্র আইএসও / আইইসি 646 হইবে। শিরোনামে প্রতিটি অক্টেটকে স্বাক্ষরবিহীন মান হিসাবে বিবেচনা করা হবে। এই মানগুলি স্বাক্ষরবিহীন পূর্ণসংখ্যায় যোগ করা হবে, শূন্য থেকে আরম্ভ করা হবে, যার যথার্থতা 17 বিটের চেয়ে কম নয়। চেকসাম গণনা করার সময়, chksumক্ষেত্রটি এমন মনে করা হয় যেন এটি সমস্ত <স্পেস> অক্ষর।

অবশ্যই, আপনাকে আসলেtar এটির কিছু করতে হবে না , কারণ ইতিমধ্যে এটি করতে পারে - এটি যা তা করে - তাই আপনাকে সম্ভবত সংরক্ষণাগারটি অনুসন্ধান করতে এবং ফাইলটি বের করার জন্য এটি ব্যবহার করা উচিত। এটি করার ফলে এটি আপনার থেকে আলাদাভাবে কিছু করবে না যদি আপনি জানতেন যে আপনি কী সম্পর্কে ছিলেন তবে এটি সম্ভবত এটি আরও ভাল এবং দ্রুত করবে কারণ এটি তার কাজ। এবং যাইহোক, আপনি কেন করা উচিত?


0

আপনি এই লাইনটি ব্যবহার করতে পারেন

tar -axf a.tar -O

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