সমস্ত ফাইল মুছুন না জিজিপ


11

এরপরে আমার মূল ফাইলগুলি মুছে ফেলা ছাড়া সাব-ডিরেক্টরিতে সমস্ত ফাইল সহ আলাদাভাবে একটি ডিয়ারের সমস্ত ফাইলকে জিপ করা দরকার। সুতরাং আসুন আমি বলি যে আমার সূচক। Html আছে, আমি শেষে সূচকটি করতে চাই। Html.gzip এবং সূচিপত্র। Html।

আমি আমার দির সমস্ত ফাইল জিজিপ করতে সক্ষম

gzip -r .

তবে আমি মূল ফাইলগুলিও রাখতে চাই।

এটা কি সম্ভব?

উত্তর:


9
find . -type f | \
while read -r x
do
  gzip -c "$x" > "$x.gz"
done

-cStdout- এ ফলাফলের push কর্মের এবং মূল একা রাখে। অসুবিধাটি হ'ল, আপনাকে নিজেরাই ফাইলগুলি সন্ধান করতে হবে। আরও পরিশীলিত ট্র্যাভার্সিংয়ের জন্য, আপনি find(1)উপরের মতো ব্যবহার করতে পারেন : .বর্তমান ডিরেক্টরি থেকে অনুসন্ধানগুলি অনুসন্ধান করতে এবং -type fপ্রতিটি নিয়মিত ফাইলের নাম ফেরত দেয়।


কেন *.*ls?

@ পোহ: *.*নিয়মিত নামযুক্ত সমস্ত ফাইলের সাথে মেলে এবং সাধারণত কোনও ডিরেক্টরি থাকে না। অবশ্যই এটি কেবল বেশিরভাগ ক্ষেত্রেই কাজ করে এবং সাধারণত এটি প্রয়োজন হয় না তবে। তারপরে findকমান্ডটি ব্যবহার করুন ।
বোলডউইন

@ বোল্ডউইন: প্রশ্ন ছিল সব ফাইলকে একটি দিরে জিপিপ করা। টোডোরls *.* মতো ফাইল বেছে নেবে না ।

lsপ্রয়োজন নেই এ সব : for x in *। তবে, ব্যবহার করা findউচিত find . -type f | while read -r x
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

আপডেট উত্তর। -rস্যুইচ অন করার জন্য ধন্যবাদ read
বোল্ডউইন

5
find . -type f -not \( -name '*.gz' -or -name '*[~#]' \) -exec sh -c 'gzip -c "{}" > "{}.gz"' \;

-name '*.txt -or -name '*.htmlকিছু ফাইল (ইতিমধ্যে সঙ্কুচিত, ব্যাকআপ এবং অস্থায়ী ফাইলগুলি) বাদ দিয়ে এখনকার পরিবর্তে আপনি কী সংকোচন করতে চান তা অন্তর্ভুক্ত করতে আপনি সহজেই এটিকে ঘুরিয়ে দিতে পারেন ।

ফাইল নেমে স্পেস হ্যান্ডেল করে ঠিক খুব ভাল।

পরিবর্তন gzipকরার জন্য echo gzipপরীক্ষার জন্য। বা সমস্ত অংশ একসাথে বাদ দিন।

সম্পাদনা: ওহ, আমি উল্লেখ করতে ভুলে গেছি যে এটি <target>.gzইতিমধ্যে বিদ্যমান কিনা তা পরীক্ষা করে না । এটি সমস্যা হতে পারে বা নাও হতে পারে।

সম্পাদনা 2: ঠিক আছে, আমরা এখানে এমন কিছু যাব যা বিদ্যমান ফাইলের জন্য পরীক্ষা করে। যদি তা চাওয়া হতে পারে। অনলাইন-নেসকে ক্ষমা করুন।

while read file; do if [ ! -f "$file.gz" ]; then echo "Compressing $file"; gzip -c "$file" > "$file.gz"; else echo "Not overwriting $file.gz";  fi  done < <(find . -type f -not \( -name '*.gz' -or -name '*[~#]' \))

আমার- findফু সম্ভবত এটি যা হতে পারে তা নয়, এটি খুব ভালভাবেই সরাসরি খুঁজে পাওয়া যায়।


1
প্রতিটি ফাইলটিতে স্ট্যাট কল করা এড়াতে কেবল নামটি-টাইপের আগে আসা উচিত।

@ বেন সার্থক, ভাল ইনপুট! বড় গাছগুলির জন্য এটি লক্ষণীয় হতে পারে।
প্লুন্ড্রা



0
gzip -rc `ls` > archive.gz

দেবিয়ান (gzip 1.3.12-6) এ পরীক্ষিত


এটি একটি সংরক্ষণাগার তৈরি করে। ওপি পৃথক সংরক্ষণাগার চায়। lsঅপ্রয়োজনীয়, ব্যবহার *
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.