find . -type f -not \( -name '*.gz' -or -name '*[~#]' \) -exec sh -c 'gzip -c "{}" > "{}.gz"' \;
-name '*.txt -or -name '*.htmlकुछ फ़ाइलों (पहले से संपीड़ित, बैकअप और अस्थायी फ़ाइलों) को छोड़कर, अब आप इसे आसानी से शामिल करने के लिए इसे बंद कर सकते हैं जैसे कि अब (जैसे)।
फ़ाइल नाम में रिक्त स्थान भी ठीक है।
बदलें gzipकरने के लिए echo gzipपरीक्षण के लिए। या -exec भाग को एक साथ छोड़ दें।
संपादित करें: ओह, मैं यह उल्लेख करना भूल गया कि यह जाँच नहीं करता है कि क्या <target>.gzपहले से मौजूद है। यह समस्या हो सकती है या नहीं भी।
Edit2: ठीक है, यहाँ हम कुछ के साथ जाते हैं जो मौजूदा फ़ाइल के लिए जाँच करता है। अगर वह चाहता हो सकता है। ऑनलाइन-नेस क्षमा करें।
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 '*[~#]' \))
My find-foo शायद यह नहीं है कि यह क्या हो सकता है, इसे खोजने में सीधे छोड़ना बहुत संभव हो सकता है।
*.*मेंls?