টার সংরক্ষণাগার থেকে ফাইলগুলি সরান


17

আমার কাছে একটি বড় ফাইল foo.tar.xzরয়েছে যাতে অনেকগুলি ফাইল (200000 বলুন) থাকে। আমি বুঝতে পেরেছিলাম যে এই সংরক্ষণাগারটিতে কিছু না (প্রায় 5000) ফাইল রয়েছে। আমার ডিস্কের উপরে পুরো জিনিসটি সংক্রমিত করার মতো পর্যাপ্ত ডিস্কের জায়গা নেই; অতিরিক্তভাবে, আমি আশঙ্কা করি যদি আমি এটিগুলি করি তবে বৈশিষ্ট্যগুলি / অধিকারগুলি হারাতে পারে। আমি হোস্টে দুটি অনুলিপি যথেষ্ট স্থান সংকুচিত সংরক্ষণাগার যদিও। অন-দ্য ফ্লাইটে আর্কাইভ থেকে কিছু ফাইল (ফাইলের নাম দিয়ে একটি রেজেক্সের সাহায্যে নির্দিষ্ট করা হয়েছে) সরানোর কোনও সরঞ্জাম আছে, অর্থাত্ পৃথক ফাইলে সংরক্ষণাগারটি আনপ্যাক না করে?

উত্তর:


15

জিএনইউ টারের একটি --deleteবিকল্প রয়েছে যা আজকাল সংরক্ষণাগারগুলির সাথে কাজ করে।

এটি এটির মতো ব্যবহার করুন, উদাহরণস্বরূপ:

tar -vf yourArchive.tar --delete your/path/to/delete

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

এছাড়াও, আর্কাইভগুলির (নকশা দ্বারা) প্যাকড লিনিয়ার প্রকৃতির কারণে অপারেশনটি কোনও অবস্থাতেই বরং ধীর হবে।


1
এটি বিদ্যমান আছে, তবে এটি এমন ফাইলগুলির সাথে কাজ করে না যেখানে এলোমেলো অ্যাক্সেস সম্ভব নয় (উদাহরণস্বরূপ আর্কাইভগুলি সংক্ষেপিত করুন) তবে এটি আমার ব্যবহারের ক্ষেত্রে।
FUZxxl

1
অন্য সমস্যাটি হ'ল আমি মোছার জন্য কোনও প্যাটার্ন নির্দিষ্ট করতে পারি না। ২০১৩ সাল থেকে আমার মন্তব্যটি নোট করুন যেখানে আমি ইতিমধ্যে এর স্বল্পতাগুলি সমাধান করেছি gtar --delete
FUZxxl

4
@FUZxxl এর সাথে -Tকাজ করে --deleteএবং --wildcardsআপনাকে ফাইলের পরিবর্তে প্যাটার্ন ব্যবহার করতে দেয়, সুতরাং নিদর্শনগুলি এবং ব্যবহার সহ একটি অস্থায়ী ফাইল তৈরি করুন unxz < file.tar.xz | tar --wildcards --delete -T patternfile | xz > file2.tar.xz। এটি একটি সম্পূর্ণ রেজেেক্স করবে না (যদি আপনার এটির প্রয়োজন হয় তবে, tar -tমুছতে কেবল ফাইল নামগুলির একটি তালিকা ব্যবহার করুন এবং তৈরি করুন), কেবল ফাইলের সাথে মিলে যাওয়া নিদর্শন।
র্যান্ডম 832

14

(সম্পাদিত, যেহেতু আমি প্রশ্নটি ভুল বুঝেছিলাম, যা সম্পাদিত হয়েছিল তখন থেকে)

আপনি যা করতে পারেন তা হ'ল পুরো ফাইলটি নিষ্কাশন করা, মুছতে এবং পুনরায় সংযোগ করা।

unxz < foobar-old.tar.xz | tar --delete foo/bar | xz > foobar-new.tar.xz

সরাসরি একটি টার থেকে ফাইলগুলি মুছা সম্ভব নয়।

টার একটি স্ট্রিম, যা মূলত টেপ ড্রাইভের জন্য তৈরি যা এলোমেলোভাবে চেষ্টা করে না - তত্ত্বের ক্ষেত্রে কোনও ডিস্ক ফাইল সিস্টেমে কোনও গর্ত খোঁচা / বাকী ফাইলটি পুনরায় লেখার পক্ষে সম্ভব হতে পারে, সংক্ষেপণের সাথে বিন্দুটি মোটা হয় যতটা না সমস্ত সংক্ষেপণের পদ্ধতিগুলি ফাইলের আগে ঘটে যাওয়া সামগ্রীর উপর খুব বেশি নির্ভর করে। স্থানে এটি করার জন্য আপনার উভয় সংক্ষেপণ পদ্ধতি এবং টার ফাইল ফর্ম্যাট সম্পর্কে খুব বিস্তারিত জ্ঞান প্রয়োজন। এটি এমন এক পর্যায়ে জটিলতা যে কেউ এটি নিয়ে মাথা ঘামায়ও না। কেবলমাত্র ফাইলগুলি চারপাশে রাখা এবং এড়িয়ে চলা সস্তা।

আপনার যদি এই কার্যকারিতাটির প্রয়োজন হয় তবে টার সম্ভবত আপনি যা চান তা নয়।


এই ফাইলগুলি সংরক্ষণাগার আকারের 35% আপ করে। আপনি যে সীমাবদ্ধতাগুলি উল্লেখ করেছেন তা কেবলমাত্র আমি তখনই ফাইলটি পুনরায় লেখার জন্য প্রযোজ্য , যদি আমি এটি স্থানের বাইরে পরিবর্তন করে থাকি না, যা আমি করতে পারি ( প্যাক করা সংরক্ষণাগারটি দু'বার সংরক্ষণ করার জন্য আমার পর্যাপ্ত জায়গা রয়েছে )। এমন কোন সরঞ্জাম আছে?
FUZxxl

আমি তখন আপনার প্রশ্ন ভুল বুঝতে পারে। যদি আপনি সর্বোপরি তারপ্যাকটি আনপ্যাক করতে ইচ্ছুক হন এবং এটি পুনরায় প্রতিবেদন করতে চান, (কেবলমাত্র টারেড ফাইলগুলি তৈরি না করে - অর্থাত্, ডাইরেক্টর জন্য সরাসরি পাইকারের ট্যারি), এটি সম্ভব হতে পারে।
frostschutz

হ্যাঁ, আমি এটি করতে পারি। এটি কেবলমাত্র ফাইলগুলিতে ইউড / গিড / বৈশিষ্ট্য রয়েছে যা আমার সংরক্ষণ করা দরকার। এছাড়াও, আনপ্যাকড উপস্থাপনা সংরক্ষণ করার জন্য আমার কাছে পর্যাপ্ত ডিস্কের স্থান নেই। আমার কাছে দুটি প্যাকড সংরক্ষণাগার সংরক্ষণের জন্য পর্যাপ্ত জায়গা রয়েছে।
FUZxxl

1
এটাই মোটেই সমস্যা নয়। আমি যদি এক পাসে এটি করতে পারি তবে সময়টি খুব বেশি দীর্ঘ হবে না। আমি কোনও সংরক্ষণাগার ফর্ম্যাটটি কল্পনা করতে পারি না যা প্রকৃতপক্ষে সঞ্চয়স্থান ছাড়ার সময় দ্রুত বিলোপের অনুমতি দেয়।
FUZxxl

1
--wildcardsসহায়তা ... ./যদিও আমাকে প্যাটার্নের শুরুতে অন্তর্ভুক্ত করতে হয়েছিল ...
গার্ট ভ্যান ডান বার্গ

-4

ম্যানুয়াল অনুসারে , tarকেবলমাত্র সেগুলি বের করতে আপনি ফাইলের একটি তালিকা পাস করতে পারেন । উদাহরণ স্বরূপ:

$ tar --file archive.tar --list
foo
bar
baz

$ tar --file archive.tar --extract foo

কীভাবে --extract আমাকে সহায়তা করে তা আমি দেখতে পাই না। আপনি বিস্তারিত বলতে পারেন? দয়া করে মনে রাখবেন যে আমি সংরক্ষণাগারটি (বা এর উল্লেখযোগ্য অংশগুলি) ডিস্কে আনপ্যাক করতে পারি না।
FUZxxl

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