मेरे पास एक कार्य स्टेशन है जो सुरक्षित रूप से रखने के लिए सर्वर पर अपलोड किए जाने से पहले अस्थायी रूप से छवियों को संग्रहीत करता है। मुझे 3 डी पर दिन में एक बार पुरानी फ़ाइलों को हटाने का शौक है, जो कि लिपि के माध्यम से निर्धारित स्क्रिप्ट का उपयोग कर रहा है।
#!/bin/bash
find /some/directory/with/pictures/* -exec rm -rf {} \+
मैंने इसे एक विकास कार्य केंद्र पर काम करने के लिए सत्यापित किया है जिसमें केवल ~ 250 एमबी चित्र (30 चित्र) हैं।
चूंकि प्रोडक्शन वर्कस्टेशन में यह स्क्रिप्ट नहीं चल रही थी, इसलिए कई सौ गीगाबाइट के ऑर्डर पर उनके पास बहुत सारी छवियां हैं। इसका मतलब यह है कि जब findशेल स्क्रिप्ट के माध्यम से निष्पादित किया जाता है, तो यह रुक जाता है और कहता है "बहुत सारे तर्क।"
मैं (अगर बदलते कोशिश कर xargs, देखकर क्यों पता लगाने की कोशिश में बहुत समय खर्च +करने के लिए ;आदि प्रभावित कुछ भी ...) केवल एक चीज मैं कोशिश नहीं की वास्तव में खोल स्क्रिप्ट के माध्यम से निर्देशिका में जा रहा था पूरी तरह लगता है का उपयोग कर से बचने के लिए। मुझे लगता है कि "बहुत सारे तर्क" समझ में आते हैं - ऐसा लगता है कि तर्कों की संख्या पर एक टोपी है, और मेरे पास एक कार्यस्थान में ~ 33,000 फाइलें हैं जो मैं इस अवधारणा को साबित कर रहा हूं।
मेरे लिए चीजों को और अधिक भ्रमित करने के लिए, find ./ -exec rm -rf {} \;टर्मिनल कार्यों (धीरे) के माध्यम से निर्देशिका के भीतर निष्पादित करना ।
मैंने टर्मिनल का उपयोग करके डिलीट का प्रदर्शन किया है, इसलिए मैं भविष्य में प्रक्रिया के बारे में चिंतित नहीं हूं (यह एक दिन में 33k चित्रों के पास कहीं भी उत्पादन नहीं करेगा), लेकिन मैं जो जानना चाहता हूं वह 33k के साथ टर्मिनल में क्यों find काम करता है तर्क, लेकिन शेल स्क्रिप्ट के भीतर नहीं।
find ./some/directory/with/pictures/ -exec rm -rf {} \+बराबर होगा? मैं पहले पुनरावृत्तियों से परेशान था जहाँ मैं फ़ाइलों के साथ फ़ोल्डर भी हटा दूँगा। संपादित करें: यह समकक्ष नहीं है। यह फ़ोल्डर को हटा देता है जैसा कि मुझे उम्मीद थी।
find ./some/directory/with/pictures/ -mindepth 1 -exec rm -rf {} \+(एक परीक्षण निर्देशिका पर, निश्चित रूप से)। -mindepth 1निर्देशिका खुद को हटाने से रोकने चाहिए।
find ./some/directory/with/pictures/काम नहीं करता है, लेकिन जब -mindepth 1आप प्रस्तावित करते हैं तो अवधि को हटाने से काम होता है । लेकिन यह प्रश्न findमेरे कमांड के सिंटैक्स के बजाय क्यों और कैसे सीमित है (हालांकि यह संबंधित है) के बारे में अधिक था ।
*आपकी स्क्रिप्ट में शेल विस्तार को ट्रिगर किया जा सकता है जो कमांड लाइन की लंबाई सीमा से अधिक हो सकता है।