উত্তর:
প্রতিটি ফাইলকে আলাদা ট্যারে ফাইলের মধ্যে রাখলে এই দৃশ্যের কোনও অর্থ হয় না। আপনি gzip
তাদের সরাসরি সংকোচনের জন্য ব্যবহার করতে পারেন :
gzip *
পরিণাম ডেকে আনবে file1.out.gz
, file2.out.gz
ইত্যাদি
আপনি tar
কেবল তখনই ব্যবহার করতে পারেন যখন আপনার একক ফাইল হিসাবে সংকুচিত সংরক্ষণাগার প্রয়োজন।
আপনার যদি প্রতিটি ফাইলের জন্য টার আর্কাইভের প্রয়োজন হয় তবে আপনি এটির মতো এটি তৈরি করতে পারেন:
for i in *; do tar -czf $i.tar.gz $i; done
find . -maxdepth 1 -type d ! -path . | while read a_dir; do tar -zcvf ${a_dir}.tgz ${a_dir} --remove-files; done
find . -maxdepth 1 -mindepth 1 -type d -exec tar -zcvf {}.tgz {} --remove-files \;
@ সোভেনডাব্লুয়ের উত্তরটি তৈরি করতে (যা কেবলমাত্র বর্তমান ডিরেক্টরিতে কাজ করবে), যদি আপনার কাছে বিশাল সংখ্যক ফাইল থাকে বা এটি পুনরাবৃত্ত ডিরেক্টরি ডিরেক্টরিতে করতে চান তবে আপনিও ব্যবহার করতে পারেন
find . -type f -exec gzip \{\} \;
এবং যদি আপনাকে আউটপুটটিকে অন্য কোনও ডিরেক্টরিতে রেখে দিতে হয় (উদাহরণস্বরূপ ../target
) এবং মূলগুলি সরাতে না চান তবে আপনি এর মতো কিছু করতে পারেন:
find . -type f -print | while read fname ; do
mkdir -p "../target/`dirname \"$fname\"`"
gzip -c "$fname" > "../target/$fname.gz"
done
find . -type f -exec gzip {} \;
যথেষ্ট হবে। দ্বিতীয় কোড ফাঁকা স্থান এবং এই জাতীয় ফাইলের নাম সহ ব্যর্থ হবে।
{}
অভ্যাসের শক্তি হিসাবে পালিয়ে এসেছি )। অন্যরা ইতিমধ্যে আপনার প্রশ্নের উত্তর হিসাবে এগুলি পোস্ট করেছে।
find . -type f -exec grep -Iq . {} \; -and -exec gzip {} \;
আর একবার চেষ্টা কর:
#!/bin/bash
for fich in *; do
if [ "$fich" != "*" ] ; then
gzip -9 -c $fich > $fich.tar.gz
\mv $fich.tar.gz $fich
fi
done