तेजी से लिनक्स निर्देशिका पेड़ हटाने


6
rm -rf mydir

एक reiserfs फ़ाइल सिस्टम पर 100000 फ़ाइलों (उप-निर्देशिकाओं) के साथ एक निर्देशिका ट्री के लिए दर्दनाक रूप से धीमा है।

निर्देशिका के पेड़ों को तेजी से हटाने के लिए कोई विचार (यहां तक ​​कि दुर्लभ भ्रष्टाचार को जोखिम में डालते हुए)?


परीक्षण नहीं किया गया, लेकिन आप find mydir -deleteइसे हटाने का प्रयास कर सकते हैं । findभारी रूप से अनुकूलित है - शायद यह इससे भी तेज है rm -rf?
जोहान्स शाउब - १५'०

समय के साथ अपडेट करें: rm -rf ने 0m18.688s वास्तविक समय लिया, जबकि find -delete ने 1m38.1263 वास्तविक समय लिया। मुझे लगता है कि rm जीतता है :) हालाँकि मैंने rm परीक्षण बाद में किया - मुझे आश्चर्य है कि क्या यह मायने रखता है? (यह एक सटीक प्रतिलिपि थी, और मैंने पेड़ों को बनाने के बाद बॉक्स को फिर से शुरू किया था)। उपयोगकर्ता और sys समय दिलचस्प हैं: rmलिया गया user 0m0.130s sys 0m11.913sजबकि findलिया गया user 0m0.057s sys 0m0.597s। पदानुक्रम 7000 फ़ाइलों के आसपास था और कई निर्देशिकाएं, जिनमें गहराई 2 (फाइलें उप-विभाजनों में हैं) शामिल हैं।
जोहान्स शहाब -

जवाबों:


4

एकमात्र उपाय मैं सोच सकता हूं कि आपकी सभी फाइलें एक अलग फाइल सिस्टम पर हैं। फ़ाइल सिस्टम डिस्क विभाजन या फ़ाइल में रह सकता है।

फ़ाइलों को हटाने के बजाय आप विभाजन को मिटा सकते हैं या फ़ाइल को हटा सकते हैं।

मुझे आपसे सहानुभूति हो सकती है क्योंकि मेरे पास NTFS पर> 200 000 फाइलों के साथ प्रोजेक्ट है और पेड़ को हटाना वास्तव में एक दर्द है। अगर मैं कर सकता तो मैं करता

  • किसी अन्य फ़ाइल सिस्टम का उपयोग करें (reiserfs, आपके मामले में, बहुत सारी फ़ाइलों के साथ बहुत अच्छा है, वैसे भी IIRC)
  • बहुत सारी फाइलें होने से बचें (जैसे डेटाबेस का उपयोग करें)

जेंटू पर लोग वास्तव में ऐसा ही करते हैं क्योंकि पैकेज प्रबंधक के पास कई छोटी फाइलें होती हैं जिन्हें वह पढ़ता है और लिखता है। बस एक अलग फाइल सिस्टम dd पर / usr / portage डालें अगर = / dev / zero of = / opt / portagefile bs = 1k seek = 1024k count = 1; mkfs.reiserfs -f / opt / portageFile gentoo-wiki.info/TIP_Speeding_up_portage#Why_It_Works
j13r

2

यह बहुत ज्यादा हमेशा एक बुरे विचार है एक निर्देशिका में एक zillion फाइलें होने। लेकिन यह हर समय मेरे साथ होता है। पुराने फ़ाइल सिस्टम अनुपयोगी हो गए क्योंकि फ़ाइलों की संख्या में O (n) हटा दिया गया था। मुझे नहीं लगता कि किसी भी मौजूदा लिनक्स फाइल सिस्टम खराब हैं। (ReiserFS के बारे में सकारात्मक नहीं है, लेकिन मुझे आश्चर्य होगा अगर यह था)। लेकिन एक अच्छी फाइलसिस्टम के साथ भी, शेल टूल्स फाइलों को हटाते समय बहुत अधिक काम करते हैं। वे फाइलों का मंचन कर रहे हैं, स्पष्ट रूप से अनुमतियों का परीक्षण कर रहे हैं, बड़ी कमांड लाइन बना रहे हैं, आदि।

एक वर्कअराउंड एक बहुत ही निम्न स्तर का डिलीट करना है, बस अनलिंक () सिस्टम कॉल को कॉल करना है। यहां कुछ त्वरित और गंदे पायथन हैं, जिन्होंने मुझे rm में विफल होने पर एक लाख फाइलें हटाने की अनुमति दी है:

files = os.listdir('.')
for f in files:
  try: os.unlink(f)
  except Exception, e: print e

यह वही है जो rm -rf करता है, अनलिंक कॉलिंग। rm केवल अनलिंक करने का एक पर्याय है। अजगर सी से तेज नहीं होगा। आरएम आपको कैसे विफल कर दिया है? क्या अंतर होना चाहिए?
j13r

1

XFS बहुत तेजी से हटाता है। ext {2,3,4} सबसे खराब हैं, मुझे नहीं पता कि उनके बीच कहाँ reiserfs है।

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