লিনাক্স টার-টি - উড়ে কাজ করে না


3

আমি লিনাক্স gnu টার সাথে কিছু সমস্যা পেয়েছি। আমি অপশনটি ব্যবহার করি

-T -  (for file list from stdin) or
-T named_pipe_file    ,

এই উড়ে কাজ করে না। উদাহরণস্বরূপ, সাধারণ ইন্টারেক্টিভ স্ক্রিপ্ট:

while read x; do echo $x; done|\
tar cvf tar.tar -T -

ট্যার সংরক্ষণাগারটি কেবল তখনই শুরু হয় যখন আমি ইনপুট ইওফ চিহ্নিত করার জন্য ^ ডি চাপলে একই অবস্থা যখন আমি নামযুক্ত পাইপ ব্যবহার করি:

mkfifo named_pipe
tar cvf tar.tar -T named_pipe
while read x; do echo $x; done >named_pipe

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

আমার টার সংস্করণ: তার (জিএনইউ টার) 1.26 (সি) 2011 এফএসএফ


আপনি tarফাইলের নাম বা প্রকৃত ডেটা সংকুচিত করা উচিত? -Tবিকল্প ফাইল নামের একটি তালিকা আশা এবং আমার সিস্টেমে একটি লুপ হিসেবে advertized কাজ করে।
টেরডন

উত্তর:


3

tar ইতিমধ্যে বিদ্যমান সংরক্ষণাগারগুলিতে সংযোজন করতে সক্ষম, তাই আপনি এটি করতে পারেন:

touch tarfile.tar
command_that_produces_file_list | xargs tar rf tarfile.tar

দুর্ভাগ্যক্রমে, এটি ফ্লাই সংকোচনের সাথে কাজ করে না। ভাগ্যক্রমে, tarফর্ম্যাটটি যথেষ্ট সহজ আমরা কিছু হ্যাকিং করতে পারি:

command_that_produces_file_list | {
  xargs -i sh -c 'tar c {} | head -c $(( (`stat --printf="%s" {}` + 511) / 512 * 512 + 512))';
  dd if=/dev/zero bs=512 count=2 2>/dev/null;
} | compression_utility

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


আমি এই সম্পর্কে জানি। এটি কেবলমাত্র সঙ্কুচিত আর্কাইভের জন্য বা হার্ডওয়ারের সংকোচনের সাথে থাকা টেপগুলির জন্য যা সফ্টওয়্যারটিতে প্রকাশিত হয়নি। এই টেপটি সংকুচিত হিসাবে সফ্টওয়্যারটিতে দেখানো হয়েছে। আমি এটি হিসাবে সহজ হতে পারে উদাহরণ তৈরি। স্ক্রিপ্টে আমি টার্গেটের জন্য ফ্ল্যাগ -9 এভ এবং - রেমোভ-ফাইলগুলির সাথে এক্স জেড সংক্ষেপ ব্যবহার করছি।
Znik

আপনি জায়গাগুলিতে ফাইলগুলি সঙ্কুচিত করার চেষ্টা করতে পারেন এবং তারপরে এগুলি একটি সরল টারে সংরক্ষণের চেষ্টা করতে পারেন, অন্যথায় আমি একটি সমাধান খুঁজে বার করব যা টার ব্যবহার না করে। এটি করার জন্য আপনার কী দরকার?
উইজেডসবারমারিনার

@ user215501 এটি সক্রিয় করে দেখা যাচ্ছে যে এটির সাথে করার একটি উপায় আছে, আমার নতুন সম্পাদিত উত্তর দেখুন।
উইজেডসবারমারিনার

@ ইনজেডসুবারিনার, এবং (ব্যবহারকারী) 215501 টার হ্যাক ফর্ম্যাট সহ খুব সুন্দর আপডেট :) আমি আশা করি এই বাগটি টারে (আমার মতে) খুব শীঘ্রই অপসারণ করা হবে। আমি নিশ্চিত না আমাদের মধ্যে কে এই কৌতুকপূর্ণ স্ক্রিপ্টটি করেন
Znik

@ উইজেডসুবারিনার আপনাকে টুপি দিয়েছে স্যার! :)
Рахматуллин Рахматуллин

2

ভাল খবর. আমি আমার বাগ রিপোর্টটি bug-tar@gnu.org, উদ্ধৃত করার উত্তর পেয়েছি:

থেকে: সের্গে পোজন্যাকফ তারিখ:
থু, 05 সেপ্টেম্বর 2013 08:40:40 +0300 বিষয়: পুনরায়: [বাগ-টার] জ্ঞানু টার, স্টিডিন বা নামযুক্ত পাইপের বিকল্প-টি ইন্টারেক্টিভ নয়

হাই গ্রাজেগরজ,

এটি গিট হেডে স্থির করা হয়েছে (কমিট 1fe0c83d থেকে শুরু করে)।

শুভেচ্ছা, সের্গেই

তারপরে আমি অপেক্ষা করছি কখন এটি লিনাক্স ডিস্ট্রোয় ঠিক করা হবে :)


0

এই ব্যাখ্যাটি পড়ুন (প্রথম উত্তর): পাইপযুক্ত আদেশগুলি কোন ক্রমে চালিত হয়?

আপনি যা দেখছেন তা প্রক্রিয়া শুরু করার আগে ইনপুট তালিকার সমাপ্তির জন্য টার ব্লক করা। যুক্তিযুক্তভাবে, ইনপুটটির সাথে সমান্তরালভাবে প্রক্রিয়াজাতকরণ করা, একের পর এক দরকারী হতে পারে, তবে আমি মনে করি না জিএনইউ টার এটি সমর্থন করে।

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

জিএনইউ লোকেরা সাধারণত খুব বন্ধুত্বপূর্ণ হয়, আপনি জিজ্ঞাসা করতে পারেন কেন এটি কোনও বৈশিষ্ট্য নয়, আপনি অন্যান্য সরঞ্জাম দিয়ে কীভাবে এটি করতে পারেন এবং এমনকি ভবিষ্যতে এটি টারের অংশ হওয়ার জন্য অনুরোধ করতে পারেন;

https://lists.gnu.org/mailman/listinfo/help-tar


দুর্ভাগ্যক্রমে এটি উত্তর নয়। আপনি আমার উদাহরণগুলিতে "টার" অংশটি প্রতিস্থাপন করতে পারেন | সেড / এস / এএ / বিবি / 'বা নামযুক্ত পাইপের জন্য সেড / এসএ / বিবি /' <নাম_পাইপ (যাচাইয়ের জন্য)। এটি পুরোপুরি কাজ করে। আপনি কীবোর্ড স্ট্রিং দিয়ে রেখেছেন এবং 'আ' শব্দগুচ্ছটি যদি তা পাওয়া যায় তবে সঙ্গে সঙ্গে প্রতিস্থাপন করা হবে এবং স্ক্রিনে ফিরে মুদ্রণ করুন। পাইপ দিয়ে সব ঠিক আছে। টার কমান্ড মূল সমস্যা।
Znik

এটাই আমি বলেছিলাম, এবং ব্যবহারকারী 215501 আমার পরামর্শ অনুসরণ করেছে (আমি মনে করি) ফলস্বরূপ সুখবর নিয়ে;)
Рахматуллин Рахматуллин

জিএনইউর লোকেরা সত্যিই বন্ধুত্বপূর্ণ :) তবে ট্যারা সম্পর্কে। এটিতে সোর্স ফাইলগুলি তাত্ক্ষণিকভাবে অপসারণ করার ক্ষমতা রয়েছে। এটি অস্থায়ী মুক্ত স্থান বাঁচানোর জন্য করা হয়, যা মানুষের মধ্যে বিস্মৃত হয়। অন্যদিকে, টાર আর্কাইভে থাকা ফাইলগুলির জন্য একই ধারা রয়েছে যেমন- STDIN দ্বারা -T - বিকল্পের জন্য। বাস্তবে টারে কিছু বাফারিং অপসারণ করে। এটি বর্তমান সংরক্ষণাগারভুক্ত / সম্পন্ন ফাইলটি মুছবে না, তবে আগের ফাইলটি। এটি ডেটা হ্রাসের জন্য প্রতিরোধ, এই কাজটি সর্বদা নয়। আপনি যখন উচ্চ বাফারিং এবং উচ্চ অভিধানের সাথে শক্তিশালী সংক্ষেপণ অ্যালগরিদম ব্যবহার করেন, তখন কোনও বড় ফাইল হ'ল এটি কোনও ফাইলের মধ্যে কোনও ডেটা সংরক্ষণ করা হয় না, তবে এখনও স্মৃতিতে রাখে।
Znik
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.