मैंने ऐसी निर्देशिका में कुछ अनचाहे किया है जिसमें पहले से ही बहुत सी चीजें हैं। मैं इसके बजाय एक अलग निर्देशिका में untar करना चाहता था। अब बीच में अंतर करने के लिए बहुत सारी फाइलें हैं। हालांकि, जिन फ़ाइलों को मैंने अनारक्षित किया है, वे अभी अभी (दाएं?) बनाए गए हैं और मूल फ़ाइलों को लंबे समय तक संशोधित नहीं किया गया है (कम से कम एक दिन)। क्या उनकी सृजन जानकारी के आधार पर इन अनछुए फ़ाइलों को हटाने का कोई तरीका है?लिनक्स में निर्देशिका में हाल ही में बनाई गई सभी फ़ाइलों को कैसे हटाएं?
उत्तर
टैर आमतौर पर फ़ाइल टाइमस्टैम्प को पुनर्स्थापित करता है, इसलिए समय के साथ फ़िल्टर करने की संभावना नहीं है।
आप अभी भी टार फ़ाइल है, तो आप क्या आप की तरह कुछ के साथ अनपैक किया नष्ट करने के लिए उपयोग कर सकते हैं:
tar tf file.tar --quoting-style=shell-always |xargs rm -i
ऊपर ज्यादातर मामलों में काम करेंगे, लेकिन सभी (फ़ाइल नाम एक गाड़ी वापसी है उनमें से तोड़ देगा), इसलिए सावधान रहें।
आप -r
जोड़ कर निर्देशिका को हटा सकते हैं, लेकिन शायद यह अपेक्षाकृत अपूर्ण निर्देशिकाओं को मैन्युअल रूप से हटाने के लिए सुरक्षित है।
ढूंढें। -माटा -1-प्रकार एफ | xargs आरएम
लेकिन
के साथ पहले परीक्षण करें। -माटा -1-प्रकार एफ | xargs echo
यह दो चीजों को छोड़कर अच्छा होगा। सबसे पहले, ** हमेशा **'print0' और 'xargs -0' का उपयोग करें। आप फाइलनामों में यादृच्छिक स्पेस वर्ण नहीं चाहते हैं जिससे आपको समस्याएं आ सकें। दूसरा, 'tar' टाइमस्टैम्प को पुनर्स्थापित करता है, इसलिए आप वास्तव में यहां mtime का उपयोग नहीं कर सकते हैं। शायद एनीम, शायद, अगर आपके फाइल सिस्टम को इसे अद्यतन करने के लिए कॉन्फ़िगर किया गया है। – Omnifarious
इसके अलावा, नोट करें उदा। पिछले दस मिनट में संशोधित फ़ाइलों के लिए -mmin -10 खोजें – sehe
जटिलता बढ़ाने के क्रम में इस प्रश्न के कई अलग-अलग उत्तर हैं।
सबसे पहले, यदि यह एक बंद है, और इस विशेष उदाहरण में आप पूरी तरह से सुनिश्चित हैं कि आपके फ़ाइल नामों में कोई अजीब वर्ण नहीं हैं (रिक्त स्थान ठीक हैं, लेकिन टैब, न्यूलाइन या अन्य नियंत्रण वर्ण नहीं, न ही यूनिकोड वर्ण) यह काम करेगा:
tar -tf file.tar | egrep '^(\./)?[^/]+(/)?$' | egrep -v '^\./$' | tr '\n' '\0' | xargs -0 rm -r
सब कुछ उदासीनता उपनिर्देशिका की सभी उप-निर्देशिकाओं पर छोड़ना है।
यह है कि फैशनेबल फ़ाइल नामों के साथ काम करता है क्या करने के लिए एक और तरीका है यह है:
mkdir foodir
cd foodir
tar -xf ../file.tar
for file in *; do rm -rf ../"$file"; done
यह एक निर्देशिका है, जिसमें अपने संग्रह का विस्तार किया गया पैदा करेगा, लेकिन यह लगता है कि आप कि चाहता था पहले से ही वैसे भी। यह .
के साथ शुरू होने वाली किसी भी फाइल को भी संभाल नहीं पाएगा।
फाइलों के साथ कि विधि काम है कि .
के साथ शुरू करने के लिए, ऐसा करते हैं:
mkdir foodir
cd foodir
tar -xf ../file.tar
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0 sh -c 'for file in "[email protected]"; do rm -rf ../"$file"; done' junk
अन्त में, Mat's answer से ले रही है, तो आप ऐसा कर सकते हैं और यह किसी भी फ़ाइल नाम के लिए काम करते हैं और नहीं untar करने की आवश्यकता होगी फिर निर्देशिका:
tar -tf file.tar | egrep '^(\./)?[^/]+(/)?$' | grep -v '^\./$' | tr '\n' '\0' | xargs -0 bash -c 'for fname in "[email protected]"; do fname="$(echo -ne "$fname")"; echo -n "$fname"; echo -ne "\0"; done' junk | xargs -0 rm -r
आप के साथ एक पास में फ़ाइलों और निर्देशिकाओं संभाल कर सकते हैं:
tar -tf ../test/bob.tar --quoting-style=shell-always | sed -e "s/^\(.*\/\)'$/rmdir \1'/; t; s/^\(.*\)$/rm \1/;" | sort | bash
आप क्या
tar -tf ../test/bob.tar --quoting-style=shell-always | sed -e "s/^\(.*\/\)'$/rmdir \1'/; t; s/^\(.*\)$/rm \1/;" | sort
linefeeds साथ फ़ाइल नामों को संभालने के लिए 'बैश' के लिए आप अधिक संसाधन की जरूरत को बंद रखना होगा पाइप होने जा रहा है देख सकते हैं।
- 1. निर्देशिका में सभी फ़ाइलों को हटाएं
- 2. यूनिक्स/लिनक्स में आज बनाई गई सभी फाइलें कैसे मिलेंगी?
- 3. निर्दिष्ट उपयोगकर्ता द्वारा बनाई गई सभी फ़ाइलों को हटाएं
- 4. एक निर्देशिका में बनाई गई LINQ
- 5. निर्दिष्ट निर्देशिका में शून्य आकार की सभी फ़ाइलों को हटाएं
- 6. हाल ही में
- 7. हाल ही में गिटिग्नोर
- 8. कुछ समय टिकटें के बीच बनाई गई फ़ाइलों को हटाएं।
- 9. हाल ही में वेबसेर्च
- 10. हाल ही में बनाई गई इकाई की आईडी प्राप्त करना - एडीओ इकाई फ्रेमवर्क
- 11. पायथन में रिमोट सर्वर पर निर्देशिका में सभी फ़ाइलों को कैसे हटाएं?
- 12. linux: प्रकार * की फ़ाइलों को .php हाल ही में संशोधित
- 13. फ़ाइलों को निर्देशिका में
- 14. निर्देशिका में सभी पायथन फ़ाइलों को चलाएं
- 15. ऐप पर निर्दिष्ट निर्देशिका में सभी FILES को कैसे हटाएं?
- 16. गिट में केवल सक्रिय/हाल ही में बदली गई शाखाओं को सूचीबद्ध करने के लिए कैसे?
- 17. शीर्ष 10 सबसे हाल की फ़ाइलों को एक निर्देशिका से दूसरी निर्देशिका में कैसे कॉपी करें?
- 18. दी गई निर्देशिका में निर्देशिका पथ के साथ सभी फ़ाइलों को निकालें
- 19. सबसे हाल ही में संशोधित फ़ाइल को कैसे पकड़ें
- 20. निर्देशिका में सभी फ़ाइलों में किसी शब्द के सभी घटनाओं को कैसे बदलें
- 21. रिमोट रिपोजिटरी में फ़ाइलों को कैसे हटाएं?
- 22. नैन में, निर्देशिका की सामग्री को कैसे हटाएं, लेकिन निर्देशिका ही नहीं?
- 23. निर्देशिका में सभी फ़ाइलों को कैसे स्रोत करें?
- 24. सभी निर्देशिका अनुमतियां हटाएं
- 25. एंड्रॉइड की कैश निर्देशिका में फ़ाइलों को कैसे स्टोर करें?
- 26. बैच निर्देशिका में सभी फ़ाइलों को संसाधित करता है
- 27. .NET में बनाई गई ओपनएक्सएमएल स्प्रेडशीट आईपैड
- 28. मैं सभी * .js फ़ाइल को लिनक्स में दोबारा निर्देशिका में कैसे ढूंढ सकता हूं?
- 29. gmake निर्देशिका में सभी फ़ाइलों को संकलित करें
- 30. आज बनाई गई सभी पंक्तियां प्राप्त करना
फ़ाइल नामों में रिक्त स्थान के साथ काम करना वास्तव में आसान है, और यह एक बेहतर जवाब होगा। – Omnifarious
@omnifa इस काम को रिक्त स्थान के साथ कैसे बनाना है? निकाली गई निर्देशिकाओं को हटाने के लिए, क्या मुझे आरएम के बाद आर भी शामिल करना चाहिए? – AnkurVj
@AnkurVj: दुर्भाग्य से टैर बनाने के लिए वास्तव में एक तरीका नहीं है जो आपको फ़ाइल नामों की एक शून्य वर्ण अलग सूची देता है, जो काफी निराशाजनक है। और हां, 'आरएम' के बाद '-r' होना चाहिए। चूंकि मैट उत्तर अपडेट नहीं कर रहा है, इसलिए मैं अपना खुद का रखूंगा। – Omnifarious