कैसे ढूंढें '--remove-files' विकल्प का उपयोग करें ढूँढें -exec के अंदर?


1

मुझे बहुत बड़ी लॉग फाइलें मिली हैं, जिन्हें मैं कंप्रेस करना चाहता हूं व्यक्तिगत रूप से इसलिए मैं एक विशाल संपीड़ित फ़ाइल प्राप्त करने के लिए xargs या पाइप stdout का उपयोग नहीं कर सकता।

मैं यह करने की कोशिश कर रहा हूँ:

find . -mtime +1 -iname "*.log" -exec tar -jcvf {} --remove-files \; 

लेकिन मुझे मिलता है:

tar: Cowardly refusing to create an empty archive
Try `tar --help' or `tar --usage' for more information.

मैंने दोहरे डैश (-) से बचने की कोशिश की है, जो मुझे लगता है कि समस्या है, कोई फायदा नहीं हुआ।

और हाँ, वास्तव में एक फ़ाइल मिल जाए:

find . -mtime +1 -iname "*.log" 
./20141002.tcp.log                  # just a test file...

क्या कोई मुझे बता सकता है कि मैं क्या गलत कर रहा हूं?

धन्यवाद!

जवाबों:


1

Tar शिकायत है क्योंकि आप इसके लिए एक तर्क पारित करने से चूक जाते हैं -f विकल्प, इस वजह से नहीं -- जिस पर आपको संदेह हो रहा था।

यहां आपकी कमांड को ठीक करने का एक तरीका है जो काम करता है GNU tar जो संभावना है कि आप क्या उपयोग कर रहे हैं:

find . -mtime +1 -iname "*.log" -exec tar --remove-files -jcvf {}.tar.bz2 {} \; 

मामले में अपने find कार्यान्वयन चाहता है {} अकेले रहने के लिए, जैसे POSIX मानक निर्दिष्ट करता है, आप चला सकते हैं:

find . -mtime +1 -iname "*.log" -exec sh -c 'tar --remove-files -jcvf $1.tar.bz2 $1' sh {} \; 

1

मैं पूर्णता के लिए अपने प्रश्न का उत्तर देने जा रहा हूं।

जैसा कि मैं स्रोत फ़ाइलों को हटा नहीं सकता था क्योंकि वे संकुचित हो रहे थे, मैंने उन्हें मैन्युअल रूप से स्क्रैप करने के लिए एक मूत स्क्रिप्ट बनाई थी। फैंसी नहीं, लेकिन क्रोन में रहना, अद्भुत काम करता है: मेरा वॉल्यूम अधिभोग 60% से 10% तक चला गया।

यहाँ स्क्रिप्ट है

#!/bin/bash
find /var/log/remote -mtime +1 -iname "*.log" > /tmp/tmp_file
for i in $(cat /tmp/tmp_file) ; do tar jcvf $i.bz2 $i && rm -rf $i ; done 
rm -rf /tmp/tmp_file
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.