फाइलों की सूची मानकर फाइल फाइलिस्ट (प्रति पंक्ति एक फ़ाइल पथ) में संग्रहित किया जाता है और आप संपीड़ित फ़ाइलों को zipdir में संग्रहीत करना चाहते हैं , यह बैश स्क्रिप्ट वांछित परिणाम प्राप्त करेगी:
#!/bin/bash
while IFS= read file; do
gzip -c "$file" > "zipdir/$(basename "$file").gz"
done < filelist
बैश / डैश में, आप उपर्युक्त को वन-लाइनर में भी बदल सकते हैं:
while IFS= read file; do gzip -c "$file" > "zipdir/$(basename "$file").gz"; done < filelist
अन्य गोले में (उदाहरण के लिए, tsh या zsh)
bash -c 'while IFS= read file; do gzip -c "$file" > "zipdir/$(basename "$file").gz"; done < filelist'
नौकरी करेंगे।
यदि बैश मौजूद नहीं है, तो इसे डैश के साथ प्रतिस्थापित किया जा सकता है।
यह काम किस प्रकार करता है
... < filelist
की सामग्री को पुनर्निर्देश filelist के लिए ...
।
while IFS= read file; do ... done
फाइलिस्ट में लाइनों के माध्यम से जाता है, चर फ़ाइल में वर्तमान में संसाधित लाइन की सामग्री को संग्रहीत करता है और निष्पादित करता है ...
।
IFS=
आंतरिक फ़ाइल विभाजक को संशोधित करता है। यह कई, प्रमुख और अनुगामी रिक्त स्थान को ठीक से संभालने के लिए आवश्यक है।
gzip -c "$file" > "zipdir/$(basename "$file").gz"
वर्तमान में संसाधित फ़ाइल को संपीड़ित करता है और आउटपुट को उसी नाम के साथ फ़ाइल में संग्रहीत करता है और निर्देशिका zipdir में .gz एक्सटेंशन देता है ।
यहाँ basename "$file"
फ़ाइल के पथ से नंगे फ़ाइलनाम को निकालता है।