আমি টারার্ড ফাইলটির বিষয়বস্তু এটি না বের করেই দেখতে চাই, পরিস্থিতি: আমার a.tar আছে এবং ভিতরে একটি ফাইল আছে ./x/y.txt
। আমি y.txt
আসলে এটিকে না বের করেই এর সামগ্রী দেখতে চাই a.tar
।
আমি টারার্ড ফাইলটির বিষয়বস্তু এটি না বের করেই দেখতে চাই, পরিস্থিতি: আমার a.tar আছে এবং ভিতরে একটি ফাইল আছে ./x/y.txt
। আমি y.txt
আসলে এটিকে না বের করেই এর সামগ্রী দেখতে চাই a.tar
।
উত্তর:
এটি সম্ভবত একটি জিএনইউ নির্দিষ্ট বিকল্প, তবে আপনি স্ট্যান্ডার্ড আউটপুট থেকে ফাইলগুলি বের করতে -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
এটি a.tar থেকে STDOUT এ ./x/y.txt এর সামগ্রী মুদ্রণ করে।
tar xfO a.tar ./x/y.txt
এটি যেমন সহজ
less a.tar:./x/y.txt
এই ম্যাজিক ট্রিকটি যদি আপনি lesspipe
ইনস্টল করে থাকেন এবং env ভেরিয়েবলটি LESSOPEN
সংজ্ঞায়িত করা হয় | /usr/bin/lesspipe.sh %s
যা আপনি যদি কম পাইপ সঠিকভাবে ইনস্টল করেন তবে এটি প্রত্যাশিত works
lesspipe.sh
সম্ভবত পছন্দের দিতে হবে।
ওহ, তবে এটি একটি ফাইলের মধ্যে কোনও 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
সংরক্ষণাগার প্রকারের মৌলিক, মানিক দিকগুলিকেই স্পর্শ করছে - প্রসারিত শিরোনাম এবং ফর্ম্যাট এক্সটেনশান এবং স্পার ফাইল এবং সংকোচনের যোগ করুন ... এবং ভাল, তাদের সাথে শুভকামনা।
মূল বিষয়ে ফিরে যান, যদিও, একটি সংরক্ষণাগারটির জন্য স্ট্যান্ডার্ড রেকর্ড সাইজটি tar
20 টি ব্লক - বা 10240 বাইট। স্ট্যান্ডার্ড রেকর্ড-আকারে এবং কোনও স্ট্যান্ডার্ড ফাইল টাইপ এবং স্ট্যান্ডার্ড ustar
শিরোনামযুক্ত একটি সংরক্ষণাগার দেওয়া হয়েছে , যদিও, আপনাকে size
শিরোনামের ক্ষেত্র অনুযায়ী মেম্বার-শিরোলেখ থেকে সদস্য-শিরোনামে এড়িয়ে যাওয়া উচিত, যতক্ষণ না আপনি কোনও সদস্যের সাথে মেলে এমন কোনও সদস্য খুঁজে না পান until যা আপনি সন্ধান করেন একবার উপস্থিত হলে, size
আপনার টার্গেটের সদস্য সদস্যের শিরোনামটির লেজ থেকে অফসেট শুরু থেকে বাইটগুলি পড়ুন । এবং এটি আপনার ফাইল।
যদিও শিরোনামের উপরে এড়িয়ে যাওয়া মারাত্মক সহজ নয়। বিভিন্ন ধরণের প্রকৃত ডেটা ব্লক যুক্ত হবে বা এর সাথে মিলবে size
। উদাহরণস্বরূপ, ডিরেক্টরি এবং লিঙ্কগুলিতে এমন কোনও ডেটা ব্লক থাকবে না, কেবলমাত্র একটি শিরোনামের বিবরণ থাকবে এবং সুতরাং আপনাকে অবশ্যই size
আপনার স্কিপ সূত্রে এর ক্ষেত্রটি প্রয়োগ করা উচিত কিনা তা নিশ্চিত করার আগে আপনাকে অবশ্যই বর্তমান শিরোনামের ফাইল টাইপ যাচাই করতে প্রস্তুত থাকতে হবে ।
এছাড়াও, রেকর্ড আকার আকারের উপাদানগুলি - সংরক্ষণাগার-সদস্যদের মাপগুলি 10240 স্ট্যান্ডার্ড রেকর্ডের সাথে ভালভাবে সিঙ্ক হয় কি না তার উপর নির্ভর করে - সেখানে প্রতিটি আকারে অতিরিক্ত 0-ব্লক সংযুক্ত থাকতে পারে বা নাও থাকতে পারে। এবং রেকর্ড- সাইজটি সংরক্ষণাগার তৈরির সময় ঘোষিত হতে পারে - এবং তাই এটি মোটেও 20 টি ব্লক নাও হতে পারে, যদিও নির্দিষ্ট হিসাবে, এটি সর্বদা 512-বাইট ইউনিটে অবরুদ্ধ করা উচিত:
tar
ইন্টারচেঞ্জ ফরম্যাট; দেখতে বর্ধিত বর্ণনা অধ্যায়। অক্ষর বিশেষ সংরক্ষণাগার ফাইলগুলির জন্য এই ফর্ম্যাটটির জন্য ডিফল্ট ব্লকসাইজটি হবে 10240 । বাস্তবায়নের সব সহায়তা প্রদান করিবে blocksize কম মান বা এর সমান 32256 যে গুণিতক 512 ।সুতরাং আপনি যদি এমন কোনও tar
ফাইলের সাথে কাজ করছেন যা এমন ফাইলগুলিতে থাকতে পারে যাতে স্বেচ্ছাসেবী বাইনারি ডেটা থাকতে পারে তবে আপনাকে অ্যালগোরিদমিকভাবে ফাইলটির মধ্য দিয়ে এড়িয়ে যেতে হবে এবং ফাইল টাইপ অনুসারে। অনুমানটি বলে:
size
ক্ষেত্র অক্টেট ফাইল মাপ।
typeflag
ক্ষেত্রের ধরনের হতে করার জন্য একটি ফাইল উল্লেখ সেট করা হয় 1 (ক লিংক ) বা 2 (ক সিম্বলিক লিঙ্ক ) , size
ক্ষেত্র শূন্য হিসাবে নির্দিষ্ট হবে।typeflag
ক্ষেত্র প্রকার ফাইল উল্লেখ সেট করা হয় 5 ( ডিরেক্টরি ) , size
ফিল্ড রেকর্ড ধরনের সংজ্ঞার আওতায় বর্ণনা হিসেবে ব্যাখ্যা করা হবে।typeflag
ক্ষেত্রের সেট করা হয় 3 ( চরিত্র বিশেষ ফাইল) , 4 ( বিশেষ ব্লক ফাইল) , অথবা 6 ( FIFO ) , অর্থ size
ক্ষেত্র POSIX.1-2008 এই ভলিউম দ্বারা অনির্দিষ্ট, এবং কোন তথ্য লজিক্যাল রেকর্ড হইবে মাঝারি সঞ্চিত।size
ক্ষেত্রটি পড়ার সময় উপেক্ষা করা হবে।typeflag
ক্ষেত্রের অন্য কোন মানে সেট করা, লজিক্যাল রেকর্ডের সংখ্যা অনুসরণ হেডার হইবে লিখিত , বিভাগের ফলাফলে কোনো ভগ্নাংশ উপেক্ষা।( (
size
+ 511 ) / 512 )
... এবং অবশ্যই অবশ্যই প্রতিটি শিরোনামের স্বতন্ত্র আকার বিবেচনা করা - যা সদস্য প্রতি অতিরিক্ত ব্লক। সুতরাং আপনি শিরোনাম থেকে শিরোনাম পর্যন্ত পঠনযোগ্য পড়া ছেড়ে যেতে পারেন যতক্ষণ না আপনি যে শিরোনামটির সাথে সন্ধান করছেন তার সাথে একত্রে অবতীর্ণ হন, তখন আপনাকে যাচাই করতে হবে যে বর্তমান রেকর্ডটি কেবল আপনার ফাইলের সাথে একটি লিঙ্ক বা প্রকৃত ফাইলের বর্ণনা দেয় কিনা? । এটি বিশেষত প্রাসঙ্গিক কারণ কারণ যখন একই ফাইলটি একটি সংরক্ষণাগারে একাধিকবার যুক্ত করা হয় তখন অনেকগুলি tar
কেবলমাত্র লিঙ্ক শিরোনামকে অন্তর্ভুক্ত করে কারণ প্রকৃত ফাইলটির ডেটা আর্কাইভের মধ্যে ইতিমধ্যে অন্য কোথাও পাওয়া যায়।
যাচাই করা হয়েছে যে আপনাকে ক্ষেত্রের জন্য আপনার গণনা প্রয়োগ করতে হবে chksum
এবং আপনার মনে হয় যে ফাইলটি আপনার মনে হয় যা আসলে আপনার সর্বোপরি চান ফাইল is tar
এর chksum
মোটামুটি সহজ though- হল:
chksum
1991 হেডার যৌক্তিক রেকর্ডে সব অক্টেট সহজ সমষ্টি অকট্যাল মান মান IRV উপস্থাপনা: ক্ষেত্র আইএসও / আইইসি 646 হইবে। শিরোনামে প্রতিটি অক্টেটকে স্বাক্ষরবিহীন মান হিসাবে বিবেচনা করা হবে। এই মানগুলি স্বাক্ষরবিহীন পূর্ণসংখ্যায় যোগ করা হবে, শূন্য থেকে আরম্ভ করা হবে, যার যথার্থতা 17 বিটের চেয়ে কম নয়। চেকসাম গণনা করার সময়, chksum
ক্ষেত্রটি এমন মনে করা হয় যেন এটি সমস্ত <স্পেস> অক্ষর।অবশ্যই, আপনাকে আসলেtar
এটির কিছু করতে হবে না , কারণ ইতিমধ্যে এটি করতে পারে - এটি যা তা করে - তাই আপনাকে সম্ভবত সংরক্ষণাগারটি অনুসন্ধান করতে এবং ফাইলটি বের করার জন্য এটি ব্যবহার করা উচিত। এটি করার ফলে এটি আপনার থেকে আলাদাভাবে কিছু করবে না যদি আপনি জানতেন যে আপনি কী সম্পর্কে ছিলেন তবে এটি সম্ভবত এটি আরও ভাল এবং দ্রুত করবে কারণ এটি তার কাজ। এবং যাইহোক, আপনি কেন করা উচিত?