मैं 7 दिनों से अधिक पुरानी सभी फ़ाइलों को हटाने के लिए कमांड लिखता हूं, लेकिन यह काम नहीं करता है:
find /media/bkfolder/ -mtime +7 -name'*.gz' -exec rm {} \;
मैं इन फ़ाइलों को कैसे निकाल सकता हूं?
मैं 7 दिनों से अधिक पुरानी सभी फ़ाइलों को हटाने के लिए कमांड लिखता हूं, लेकिन यह काम नहीं करता है:
find /media/bkfolder/ -mtime +7 -name'*.gz' -exec rm {} \;
मैं इन फ़ाइलों को कैसे निकाल सकता हूं?
जवाबों:
जैसा कि @ जूस ने बताया कि आपके बीच एक जगह छूट गई name
और '*.gz'
; केवल f iles -type f
पर कमांड चलाने के लिए कमांड उपयोग विकल्प को तेज करने के लिए भी ।
तो निश्चित कमांड होगी:
find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' \;
find
: को खोजने के लिए यूनिक्स कमांड च Iles / घ irectories / एल स्याही और आदि/path/to/
: अपनी खोज शुरू करने के लिए निर्देशिका।-type f
: केवल फ़ाइलें खोजें।-name '*.gz'
: सूची फाइलों के साथ समाप्त होती है .gz
।-mtime +7
: केवल 7 दिनों से अधिक पुराने संशोधन समय वाले लोगों पर विचार करें।-execdir ... \;
: इस तरह के प्रत्येक परिणाम के लिए, निम्न कमांड में करें ...
।rm -- '{}'
: फ़ाइल को हटा दें; वह {}
भाग वह होता है जहाँ खोज परिणाम पिछले भाग से प्रतिस्थापित हो जाता है। --
इसका मतलब यह है कि कमांड पैरामीटर्स की समाप्ति हाइफ़न से शुरू होने वाली फ़ाइलों के लिए त्रुटि को रोकने से बचें ।find /path/to/ -type f -mtime +7 -name '*.gz' -print0 | xargs -r0 rm --
आदमी से :
-print0
True; print the full file name on the standard output, followed by a null character
(instead of the newline character that -print uses). This allows file names that contain
newlines or other types of white space to be correctly interpreted by programs that process
the find output. This option corresponds to the -0 option of xargs.
जो थोड़ा अधिक कुशल है, क्योंकि यह निम्नलिखित है:
rm file1 file2 file3 ...
विरोध के रूप में:
rm file1; rm file2; rm file3; ...
में के रूप में -exec
विधि।
इसके बजाय एक वैकल्पिक और तेज़ कमांड निष्पादन के +
टर्मिनेटर\;
का उपयोग कर रहा है :
find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' +
यह कमांड rm
हर बार फाइल मिलने के बजाए अंत में केवल एक बार चलेगी और यह कमांड -delete
आधुनिक रूप में निम्न विकल्प का उपयोग करने में लगभग उतनी ही तेज है find
:
find /path/to/ -type f -mtime +7 -name '*.gz' -delete
-delete
अंत में सीधे क्यों नहीं जाऊंगा ? +
या के साथ खिलवाड़ क्यों \;
?
खोज के साथ फ़ाइलों को हटाने से सावधान रहें। आप क्या निकाल रहे हैं यह जांचने के लिए -ls के साथ कमांड चलाएँ
find /media/bkfolder/ -mtime +7 -name '*.gz' -ls
। फिर इतिहास और कमांड से पुल अप करें-exec rm {} \;
नुकसान की सीमा एक खोज आदेश कर सकते हैं। यदि आप फ़ाइलों को केवल एक निर्देशिका से निकालना चाहते हैं, तो -maxdepth 1
उपनिर्देशिकाओं के माध्यम से चलने या पूर्ण प्रणाली को खोजने से रोकता है यदि आप टाइपो करते हैं /media/bkfolder /
।
अन्य सीमाएँ जो मैं जोड़ रहा हूं वे अधिक विशिष्ट नाम तर्क हैं -name 'wncw*.gz'
, जैसे कि एक नए समय की तुलना में -mtime -31
, और खोजे गए निर्देशिकाओं को उद्धृत करना। ये विशेष रूप से महत्वपूर्ण हैं यदि आप क्लीनअप को स्वचालित कर रहे हैं।
find "/media/bkfolder/" -maxdepth 1 -type f -mtime +7 -mtime -31 -name 'wncw*.gz' -ls -exec rm {} \;
name
और जगह होनी चाहिए'*.gz'
।