जवाबों:
यह छोटी स्क्रिप्ट आपकी आवश्यकताओं को देखते हुए, आपका सबसे अच्छा विकल्प प्रतीत होती है:
cd directory
for dir in */
do
base=$(basename "$dir")
tar -czf "${base}.tar.gz" "$dir"
done
यह अपने नाम में रिक्त स्थान के साथ निर्देशिकाओं को ठीक से संभालता है।
इस बारे में कैसा है: find * -maxdepth 0 -type d -exec tar czvf {}.tar.gz {} \;
स्पष्टीकरण: आप वर्तमान निर्देशिका में सभी आइटमों पर एक खोज चलाते हैं। Maxdepth 0 इसे दिए गए तर्कों की तुलना में किसी भी कम की पुनरावृत्ति नहीं करता है। (इस मामले में *, या आपके वर्तमान निर्देशिका में सभी आइटम) 'd' तर्क "-प्रकार" केवल निर्देशिकाओं से मेल खाता है। फिर जो भी मैच होता है उस पर टार रन करते हैं। ({} मिलान फ़ाइल द्वारा प्रतिस्थापित किया जाता है)
for dir in `find * -maxdepth 0 -type d`; do tar -cvzf ${dir}.tar.gz ${dir}; done
यह प्रत्येक फाइल के लिए blah.tar.gz नामक एक फाइल बनाएगा, जो कि blah नामक एक डायरेक्टरी में है।
$ cd directory
$ for dir in `ls`; do tar -cvzf ${dir}.tar.gz ${dir}; done
अगर आपको डायरेक्टरी में बस डायरेक्टरी से ज्यादा मिला है (यानी फाइल के साथ-साथ एलएस भी डायरेक्टरी में सब कुछ वापस कर देगा), तो इसका इस्तेमाल करें:
$ cd directory
$ for dir in `find . -maxdepth 1 -type d | grep -v "^\.$" `; do tar -cvzf ${dir}.tar.gz ${dir}; done
Grep -v वर्तमान निर्देशिका को बाहर करता है जो find
डिफ़ॉल्ट रूप से कमांड में दिखाई देगा ।
for dir in *