पहले से मौजूद .gz फ़ाइलों को छोड़कर किसी निर्देशिका में फ़ाइलों को संपीड़ित करने के लिए gzip का उपयोग करें


19

मेरे पास लॉग की एक निर्देशिका है जिसे मैं gzip का उपयोग करके संपीड़ित करने के लिए एक नौकरी स्थापित करना चाहता हूं । मुद्दा यह है कि मैं उन लॉग को दोबारा नहीं लेना चाहता जो मैंने पहले ही संकुचित कर दिए हैं।

मैंने प्रयोग करने की कोशिश की ls | grep -v gz | gzip, लेकिन वह काम नहीं करता है।

क्या इसे करने का कोई तरीका है? मूल रूप से मैं निर्देशिका में हर फ़ाइल को gzip करना चाहता हूं जो कि .gz में समाप्त नहीं होती है।

जवाबों:


26

आप बस कर सकते हैं:

gzip *

gzip आपको बताएगा कि यह उन फ़ाइलों को छोड़ देता है जिनके पास पहले से ही .gz समाप्त है।
यदि वह संदेश आपके उपयोग करने के तरीके में मिलता है:

gzip -q *

आपने जो प्रयास किया वह काम नहीं आया, क्योंकि gzipस्टड से संपीड़ित करने के लिए फ़ाइलों के फ़ाइलनाम को नहीं पढ़ा है, इसके लिए आपको काम करना होगा:

ls | grep -v gz | xargs gzip

आप gzफ़ाइल के नाम में कहीं भी पैटर्न के साथ फ़ाइलों को बाहर करेंगे , न कि केवल अंत में। आपको यह भी ध्यान रखना होगा कि lsरिक्त स्थान के पार्सिंग खतरनाक है, जब आपके पास रिक्त स्थान, newlines, आदि के साथ फ़ाइल नाम हैं, शामिल हैं।

एक और अधिक स्वच्छ समाधान, gzipएक .gzसमाप्ति के साथ फ़ाइलों को छोड़ने के लिए निर्भर नहीं है, जो उपनिर्देशिकाओं में गैर-संकुचित फ़ाइलों को भी संभालता है:

find .  -type f ! -name "*.gz" -exec gzip {} \;



¹ जैसा कि izkataटिप्पणी की गई: .gzइसे सुधारने के लिए अकेले उपयोग करना, काम नहीं करेगा। आपको उपयोग करने की आवश्यकता होगी grep -vF .gzया grep -v '\.gz$'। यह अभी भी प्रसंस्करण lsके उत्पादन के खतरे को छोड़ देता है


1
"... इससे फ़ाइल नाम के कुछ आंतरिक भाग से मेल खाने की संभावना कम हो जाती है" - यह grep है, बस उपयोग करें $ताकि यह स्पष्ट हो। और आप किसी .भी तरह से बच नहीं गए , इसलिए यह केवल उन फ़ाइलों को बाहर करने के लिए जा रहा है जो शुरू होती हैं gz(क्योंकि उनके पास "पहले कोई भी चरित्र नहीं है gz")
इज़काता

1
@ इज़काटा: नहीं, जिसमें अनसैप्ड डॉट भी शामिल है और रेग्क्स $को बाहर करने के साथ एंकरिंग नहीं करना ( -vसभी फाइल जिसमें तीन या दो से अधिक वर्णों के नाम हैं, जिसमें फ़ाइल नाम में कहीं भी "gz" शामिल है। इसलिए इसमें "gz" से शुरू होने वाले नामों वाली फाइलें शामिल होंगी ।
अगली सूचना तक रोक दिया गया।

1
@DennisWilliamson मेरी अंतिम टिप्पणी स्पष्ट नहीं थी, यह gzनाम के साथ फ़ाइलों को कहीं भी बाहर करने जा रही है (शुरुआत को छोड़कर)। तो वैसे भी एंकरिंग करना बेहतर है। उपयोग नहीं होने के बाद $, यह पढ़ता है कि आपने महसूस नहीं किया कि रीजैक्स में क्या .मतलब है, इसलिए बाकी भ्रामक टिप्पणी।
इज़काता
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.