जवाबों:
हर फाइल को एक अलग टार फाइल में डालने से इस परिदृश्य में कोई मतलब नहीं है। आप 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 \;
@ SvenW के उत्तर का निर्माण करने के लिए (जो केवल वर्तमान निर्देशिका पर काम करेगा), यदि आपके पास बड़ी संख्या में फाइलें हैं या आप इसे पुनरावर्ती निर्देशिका संरचना पर करना चाहते हैं तो आप भी उपयोग कर सकते हैं
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 {} \;