हाल ही में मुझे बड़ी संख्या में फ़ाइलों (1 मिलियन से अधिक) को हटाने की आवश्यकता थी और मैंने यह करते हुए पढ़ा:
rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source
ऐसा करने के लिए सबसे अधिक अनुकूलित तरीकों में से एक था, और मैं यह प्रतिज्ञा कर सकता हूं कि यह इससे तेज है rm -rf
।
मैं इस मामले का विशेषज्ञ नहीं हूं, लेकिन मेरी समझ से rsync प्रदर्शन का कारण कुछ ऐसा करने का तरीका है जो फाइलों को सूचीबद्ध करता है (LIFO के बजाय FIFO I suppose)। अब, समस्या यह है, मुझे एक कुशल तरीके से बड़ी संख्या में फ़ाइलों को स्थानांतरित करने की भी आवश्यकता है। थोड़ा खोज करने के बाद, मैंने पाया:
rsync -av --ignore-existing --remove-source-files ~/source ~/destination
हालांकि यह सभी स्थानांतरित फ़ाइलों को हटा देता है ~/source
, निर्देशिकाएं वहीं रहती हैं। चूंकि मेरे पास "राउंड-रॉबिन" जैसी निर्देशिका संरचना है, जिनकी संख्या files/directories
1 के बहुत करीब है, इसलिए मुझे पूरी तरह से निर्देशिका से छुटकारा पाने के लिए पहला कमांड चलाने के लिए मजबूर किया गया है:
rsync -av --ignore-existing --remove-source-files ~/source ~/destination && \
rsync -av --delete `mktemp -d`/ ~/source && rmdir ~/source
एक सीधे mv
वस्तुतः तुरंत खत्म हो जाएगा, लेकिन मेरी ~/destination
निर्देशिका में फ़ाइलें हैं जिन्हें रखा जाना चाहिए, इसलिए mv
एक विकल्प नहीं है। मुझे --prune-empty-dirs
और --force
rsync विकल्प मिले, लेकिन न तो वह काम करना चाहिए जैसा मैं उम्मीद करूंगा:
--force force deletion of directories even if not empty
--prune-empty-dirs prune empty directory chains from the file-list
--remove-source-files sender removes synchronized files (non-dirs)
वहाँ एक रास्ता rsync के साथ एक चाल की नकल करने के लिए एक रास्ता है ?