फ़ाइलों को किसी अन्य निर्देशिका में ले जाएँ, जो किसी दिनांक से पुरानी हैं


28

मैं उन फ़ाइलों को स्थानांतरित करने के लिए एक समाधान की तलाश कर रहा हूं जो आज से पुराने हैं। मेरा लॉग विभाजन पूरा हो रहा है, लेकिन मैं उन्हें हटा नहीं सकता। लंबे समय तक उनकी जरूरत होती है। वैसे भी एक समाधान मैं साथ आया हूँ:

find /sourcedirectory -mtime 365 -exec mv "{}" /destination/directory/ \;

क्या यह काम करेगा? " -माइंट 365 " के कारण पूछने से क्या यह उन फाइलों को स्थानांतरित कर देगा जो आज से एक पुराने स्थान पर एक नए स्थान पर हैं?

धन्यवाद!

जवाबों:


40

तुम लगभग सही हो। -mtime 365वे सभी फाइलें होंगी जो बिल्कुल 365 दिन पुरानी हैं। आप उन लोगों को चाहते हैं जो 365 दिन या उससे अधिक पुराने हैं, जिसका अर्थ +इस तरह की संख्या से पहले जोड़ना है -mtime +365

आपको -maxdepth 1ध्वज में रुचि हो सकती है , जो आपको उप-निर्देशिकाओं में आइटम ले जाने से रोकता है।

यदि आप यह सुनिश्चित करना चाहते हैं कि आप केवल फाइलों को स्थानांतरित कर रहे हैं, निर्देशिकाओं को नहीं, -type fलाइन में जोड़ें ।

पंक्ति के अंत में हम जोड़ते हैं \;ताकि पता findचले कि हम जिस कमांड को निष्पादित कर रहे हैं उसका अंत है।

तो लाइन होनी चाहिए:

find /sourcedirectory -maxdepth 1 -mtime +365 -type f -exec mv "{}" /destination/directory/ \;

सुरक्षित पक्ष पर होने के लिए, केवल mv के बजाय ls -l कर के शुरू करें - इस तरह से आप पहले से जाँच सकते हैं कि आपको ठीक वही फाइलें मिल रही हैं जो आप चाहते हैं, इसे mv के साथ फिर से चलाने से पहले, इस तरह:

find /sourcedirectory -maxdepth 1 -mtime +365 -type f -exec ls -l {} \;

3
ध्यान रखें कि mtimeहै संशोधन समय (जो क्या आप शायद चाहते हैं की तरह लगता है - समय यह है की सबसे अधिक)। यदि ये लॉग अक्सर पढ़े / संदर्भित होते हैं, तो आप उपयोग करना चाहते हैं -atime(अंतिम पहुंच समय)।
voretaq7

2
इस लाइन के अंत में बैकस्लैश क्या करता है?
बेन लियायनैज

1
@BenLiyanage बैकस्लैश अर्धविराम के लिए एक भागने चरित्र है जो इस प्रकार है। अर्धविराम का अर्थ है execकथन का अंत । के लिए मैन पेज देखें find
जेनी डी का कहना है कि

4

उपरोक्त समाधानों का उपयोग करते समय सावधान रहें, मैंने उनका उपयोग किया और सभी सबफ़ोल्डर्स में सभी फ़ाइलों को स्थानांतरित करना समाप्त कर दिया !!!!

यह कमांड सभी फाइलों को स्रोत स्रोत के अंतर्गत / स्रोत निर्देशिका में और सभी सबफोल्डरों में ले जाता है:

find /sourcedirectory -mtime +365 -exec mv "{}" /destination/directory/ \;

इसके बजाय, विकल्प का उपयोग करें -maxdepth 1 केवल / sourcedirectory में फ़ाइलों के लिए

find /sourcedirectory -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;

उच्चतम मूल्यांकित उत्तर में यह नोट है, और इसका उपयोग करने का सुझाव देता है -type f। क्या आपका मतलब इसके बजाय यह है कि सबफ़ोल्डर्स स्थानांतरित हो जाते हैं, लेकिन उनमें से सामग्री सबफ़ोल्डर्स में बनी रहती है बजाय इसके कि उन्हें बाहर निकाला जाए या ...?
ऑस्ट्रेलियाई जूल

1
नहीं, मेरा मतलब है कि 'फाइंड' को सभी फाइलें / sourcedirectory और सभी सबफोल्डर्स को उस / sourcedirectory के भीतर मिल जाएंगी, जिसके बारे में मैंने उस समय नहीं सोचा था। '-Maxdepth 1' केवल 'खोज' को प्रतिबंधित करता है / sourcedirectory
harleygolfguy

BTW, मेरे पास यह केवल उच्चतम श्रेणी के उत्तर के लिए एक टिप्पणी के रूप में होगा, जो एक अच्छा जवाब था, लेकिन मेरे पास प्रतिष्ठा नहीं है। :)
at

0

आप इस कमांड का उपयोग कर सकते हैं, और निर्दिष्ट कर सकते हैं कि आप केवल फाइलों के लिए ही हैं, निर्देशिका के लिए नहीं, और फ़ाइल एक वर्ष से अधिक पुरानी है

find /sourcedirectory -type f -mtime +365 -exec mv "{}" /destination/directory/ \;

वह क्यों इस्तेमाल करना चाहिए rm? आपकी कमांड लॉग फ़ाइलों और संभवतः गंतव्य निर्देशिका दोनों को हटा देती है।
स्वेन

Ops, मेरी गलती, मुझे लगता है कि @mYzk इस फ़ाइलों को हटाना चाहता है। संपादित
cuonglm

0

यदि आप फ़ाइलों को अक्सर एक्सेस करते हैं, तो आप atime के साथ नीचे कमांड का उपयोग कर सकते हैं

find /sourcedirectory -type f -atime +365 -exec mv -t /destinationdirectory {} +;

0
$ find /sourcedirectory/ -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;

find: missing argument to `-exec'

सही दूर से आगे स्लैश समाप्त हो जाएगा /sourcedirectory/

$ find /sourcedirectory -maxdepth 1 -mtime +365 -exec mv "{}" /destination/directory/ \;

मेरे परीक्षणों में, मैं find: missing argumentत्रुटि को दोहराने में सक्षम नहीं था , हालांकि मैं इस बात से सहमत हूं कि अनुगामी स्लैश को छोड़ना /sourcedirectoryसही है।
गुज्जीजासन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.