2012-09-19 4 views
8

मेरे पास जंक से भरा temp निर्देशिका है जो सभी __temp__ (उदा। __temp__user_uploads) से शुरू होती है, जिसे मैं क्लीनअप फ़ंक्शन से हटाना चाहता हूं।गैर-खाली निर्देशिकाओं को हटाने के लिए मैं लिनक्स में `find` कमांड का उपयोग कैसे कर सकता हूं?

find . -name __temp__* -exec rm -rf '{}' \; 

अगर मैं आदेश चला और वहाँ कई __temp__ निर्देशिका (__temp__foo और __temp__bar) कर रहे हैं, मैं उत्पादन मिलता है:: यदि मैं आदेश चला और वहाँ

find: __temp__foo: unknown option 

मेरे समारोह प्रयास को चलाने के लिए है है केवल 1 __temp__ निर्देशिका (__temp__foo), इसे नष्ट कर दिया है और मैं आउटपुट प्राप्त:

find: ./__temp__foo: No such file or directory 

आज्ञा क्यों काम नहीं करती है, यह इस तरह असंगत क्यों है, और मैं इसे कैसे ठीक कर सकता हूं?

उत्तर

25

खोल metacharacter * गहराई-पहले खोज और उद्धरण का उपयोग करें (या बचने):

find . -depth -name '__temp__*' -exec rm -rf '{}' \; 

स्पष्टीकरण

-depth फ़्लैग के बिना

, अपने find आदेश मिलान फ़ाइल नामों को हटा देगा और फिर कोशिश (अब अनलिंक) निर्देशिका में उतरने के लिए। यह आपके एकल __temp__ निर्देशिका मामले में "ऐसी कोई फ़ाइल या निर्देशिका" की उत्पत्ति नहीं है।

* को उद्धृत या भागने के बिना, खोल उस पैटर्न का विस्तार करेगा, वर्तमान कार्य निर्देशिका में कई __temp__whatever फ़ाइल नामों से मेल खाता है। यह विस्तार find को भ्रमित करेगा, जो उस बिंदु पर फ़ाइल नामों की बजाय इसकी तर्क सूची में विकल्पों की अपेक्षा कर रहा है।

+6

जीएनयू यूटिलिटीज (ओपी लिनक्स पर है) मानते हुए, दक्षता और मजबूती में सुधार के रूप में, मैं वास्तव में 'ढूंढने की अनुशंसा करता हूं। -मैक्सडेपथ 1-प्रकार डी-नाम '__temp __ *' -print0 | xargs -0 आरएम-आरएफ'। – pilcrow

+0

+1 के बजाय xexs का सुझाव देने के लिए -exec –

+0

@ आशीष कुमार - xargs के लिए +1 क्यों? '-exec'' find' की अच्छी सुविधा नहीं है? पुलक्रो, स्पष्टीकरण के लिए धन्यवाद! – orokusaki

संबंधित मुद्दे

 संबंधित मुद्दे