2011-06-06 8 views
12

मैं मूल को बनाए रखते हुए एक निर्देशिका में एकाधिक फ़ाइलों (एकाधिक .gz फ़ाइलों में) gzip देखना चाहता हूं।व्यक्तिगत रूप से कई फ़ाइलों को Gzip और मूल फ़ाइलों को

मैं इन आदेशों का उपयोग करते अलग-अलग फ़ाइलों कर सकते हैं:

find . -type f -name "*cache.html" -exec gzip {} \; 

या

gzip *cache.html 

लेकिन न तो मूल बरकरार रखता है। मैंने

find . -type f -name "*cache.html" -exec gzip -c {} > {}.gz 

पर प्रयास किया लेकिन केवल एक {} .gz फ़ाइल बनाई। क्या ऐसा करने के लिए एक सरल तरीका है?

उत्तर

8

अंतिम आदेश में आपका > उसी शेल द्वारा पार्स किया जाता है जो find चलाता है।

find . -type f -name "*cache.html" -exec sh -c "gzip < {} > {}.gz" \; 
8

मैं 'इस बात के लिए रों सरल for निर्माण:

for f in *cache.html ; do gzip -c "$f" > "$f.gz" ; done 

तो मुझे पता था कि फ़ाइल नाम थे' bash(1) प्रयोग करेंगे समझदार ', मैं बहस के आसपास "" को बंद रखना होगा चाहते हैं, क्योंकि मैं आलसी हूँ । और मेरे फाइलनाम आमतौर पर सचेत होते हैं। लेकिन लिपियों में वह लक्जरी नहीं है।

0

आप एक से अधिक फ़ाइलों है के बाद से, जीएनयू समानांतर उपयोगी हो सकता है:

find . -type f -name "*cache.html" | parallel gzip '<{} >{}.gz' 

घड़ी एक त्वरित परिचय के लिए परिचय वीडियो: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

4

-k, --keep

एक नेस्टेड खोल का उपयोग करें

gzip 1.6 (जून 2013)जोड़ा गयाविकल्प, अब तो आप कर सकते हैं:

find . -type f -name "*cache.html" -exec gzip -k {} \; 
gzip -k *cache.html 

या सभी फ़ाइलों रिकर्सिवली बस के लिए: https://unix.stackexchange.com/questions/46786/how-to-tell-gzip-to-keep-original-file

:

gzip -kr . 

पर मिले

संबंधित मुद्दे