कई (200 000) फ़ाइलों को कैसे निकालें?


17

मुझे एक फ़ोल्डर से 200 000 फ़ाइलें (उन सभी) को निकालना होगा, और मैं फ़ोल्डर को स्वयं हटाना नहीं चाहता।

आरएम का उपयोग करते हुए, मुझे "तर्क सूची बहुत लंबी" त्रुटि मिलती है। मैंने xargs के साथ कुछ करने की कोशिश की है, लेकिन मैं शैल गाय नहीं हूं, इसलिए यह काम नहीं करता है:

find -name * | xargs rm -f

5
हटाए जाने के बाद फ़ोल्डर को क्यों न हटाएं और उसे फिर से बनाएं?
garconcn

जवाबों:


35
$ find /path/to/folder -type f -delete

15
यह शायद ध्यान देने योग्य है कि GNU खोज (जैसा कि अधिकांश लिनक्स वितरण द्वारा उपयोग किया जाता है) अपने आप ही फ़ाइलों का उपयोग करके हटा सकता है -delete। यह भी उद्धरण या newline वर्ण वाली फ़ाइलों के साथ समस्याओं से बचा जाता है (हालांकि आप GNU खोजने के लिए -print0और -0उस को ठीक करने के लिए GNU xarg के विकल्पों का उपयोग कर सकते हैं )।
डेरफक सिप

3
@DerfK, अच्छी टिप्पणी! इसके अलावा, ppl के बहुत सारे के साथ खेलने के लिए करते हैं xargsइस बीच findहै -exec command {} +वाक्य रचना।
पूजापाठ

5

आप सब कुछ सही कर रहे हैं। यह '*' है जो आपको एक समस्या देता है (शेल इसे फाइलों की सूची में विस्तारित कर रहा है find)। सही सिंटैक्स हो सकता है:

cd <your_directory>; find . -type f | xargs rm -f
find <your_directory> -type f | xargs rm -f

(उत्तरार्द्ध थोड़ा कम कुशल है क्योंकि यह अब तक के नामों को पारित xargsकर देगा, लेकिन आप शायद ही नोटिस करेंगे :-))

वैकल्पिक रूप से, आप इस तरह से अपने '*' से बच सकते हैं (हालांकि उस स्थिति में यह "" "और" .. "को भी हटाने की कोशिश करेगा; यह कोई बड़ी बात नहीं है - आपको बस थोड़ी चेतावनी मिल जाएगी :-))"

find . -name '*' | xargs rm -f
find . -name "*" | xargs rm -f
find . -name \* | xargs rm -f

यदि आपके फ़ाइल नामों में स्थान हैं तो इसका उपयोग करें:

find . -type f -print0 | xargs -0 rm -f

1
यदि आपके पास कोई फ़ाइल नाम है जिसमें स्थान नहीं है तो यह काम नहीं करता है।
user9517

@ लाईन: हाँ, मैं सिर्फ अपने जवाब को संपादित करने की प्रक्रिया में था, जिसमें सफेद रिक्त स्थान के लिए चाल शामिल थी :-)
dtoubelis

3

निम्न निर्देश वर्तमान निर्देशिका से सभी फ़ाइलों को हटा देगा :

find . -type f -exec rm {} \;

2
-name '*'"सभी फ़ाइलों" का मतलब नहीं है। फाइलों के साथ कहा जाता है:-type f
poige

2

तुम कोशिश कर सकते हो

find /path/to/folder -type f -print0  | xargs -0 rm -f

या

find /path/to/folder -type f -exec rm -f "{}" +

1

कुदोस टू क्वांटस उत्तर, यहां कुछ जोड़ दिए गए हैं।

यदि आप किसी विशेष नाम पैटर्न वाली फ़ाइलों को हटाना पसंद करते हैं, तो आप इसे इस तरह लिख सकते हैं। इसके अलावा जोड़ा -प्रिंट तो आप देख सकते हैं कि क्या हो रहा है क्योंकि फाइलें हटाई जा रही हैं।

sudo find /home/mydirectory -name "*.jpg" -type f -print -delete

उदाहरण के लिए यह mydirectory में सभी jpegs हटाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.