স্টিডিন থেকে নিষ্কাশন করার সময় টার অটোকে সংক্ষেপণের ধরণ সনাক্ত করতে দিন


16

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

tar: Archive is compressed. Use -z option

তবে আমি তার যুক্তিটি ইনপুট করতে না বলেই ট্যারটি সেই সংকোচন বিকল্পটি স্বয়ংক্রিয়ভাবে ব্যবহার করতে চাই । আমি এটা কিভাবে করবো? এটি ইতিমধ্যে সংকোচনের ধরণটি জানে বলেই কেবল ডার সংক্ষেপণ নয় কেন?

ধন্যবাদ!


এটির বিকাশ করা কঠিন ছিল না, তবে এটি এখন পর্যন্ত করা হয় না।
পিটারহ - মনিকা

3
এটি এটি না করতে পারে তার কারণটি এটি না পড়ার আগে পর্যন্ত tarকোন ধরণের ডেটা রয়েছে তা জানে না stdinএবং ততক্ষণে আনপ্রেস প্রোগ্রামটি কল করতে খুব দেরি হয়। এটি gzip, bzip2 এবং অন্যদের সমর্থন করে। এই সমস্যার চারপাশে কাজ করা সহজ নয় (এটি ডেটা বাফার করতে হবে), তাই এটি আপনাকে আবার চেষ্টা করতে বলে।
কেভিন প্যাঙ্কো

@ কেভিনপ্যাঙ্কো কেন এত দেরী হয়েছে? না, দেরি হয়নি। তিনি প্রথম 4 কে ফে-তে একটি বাফারে পড়েন, এর সংকোচনের ধরণের পরীক্ষা করে (যদি সেখানে থাকে), তারপরে প্রোগ্রামটি কল করে। এই বাফারিং অতিরিক্ত সি কোডের 10-20 লাইন ছিল।
পিটারহ - মনিকা পুনরায় ইনস্টল করুন

2
সেই সময়ে যখন এটি জানে যে এটিতে কী ডেটা রয়েছে, এটি আর কোনও সঙ্কলিত ইউটিলিটির মাধ্যমে ডেটা পাইপ করার জন্য কোনও সহজ fork()/ exec()পদ্ধতি ব্যবহার করতে পারে না । ইউটিলিটি stdinপাইপ থেকে পড়বে এবং প্রথম 4 কে এখন অনুপস্থিত হবে। পাইপ পড়ার পরে ডেটা ফেরত দেওয়ার কোনও উপায় নেই।
কেভিন প্যাঙ্কো

3
@ কেভিনপ্যাঙ্কো: মূলত এর সমমানের সমান দুটি কাজ করেই এটি করা যেতে পারে cat buffer - | gunzip। (বিকল্পভাবে, অতিরিক্ত প্রক্রিয়াটির প্রয়োজনীয়তা এড়াতে অ-ব্লকিং আই / ও ব্যবহার করা যেতে পারে))
ইলমারি করোনেন

উত্তর:


10

আপনি যে উত্তরটি শুনতে চান এটি এটি নয় তবে এটির ম্যানুয়াল অনুসারে এটি জিএনইউ টার দ্বারা সমর্থিত নয়:

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

$ cat archive.tar.gz | tar tf -
tar: Archive is compressed.  Use -z option
tar: Error is not recoverable: exiting now

আপনি যদি এ জাতীয় ডায়াগনস্টিকস দেখতে পান তবে কেবলমাত্র জিএনইউ টারের অনুরোধে প্রস্তাবিত বিকল্পটি যুক্ত করুন:

$ cat archive.tar.gz | tar tzf -

- 8.1.1 সংকুচিত সংরক্ষণাগারগুলি তৈরি এবং পঠন


2
নোট করুন এটি ওএসএক্স-এ ট্যার কমান্ডে কাজ করে তবে জিএনইউ টার ব্যবহার করে লিনাক্সে নয়। সুতরাং এটি স্থির করা যেতে পারে।
শান পেরি

8

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

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