rm -f के लिए वैकल्पिक विकल्प


10

मैं एक कमांड लाइन चलाना चाहूंगा:

cd ~/www/tmp/; rm -P 2*

लेकिन मुझे एक त्रुटि मिलती है अगर 2 के साथ शुरू होने वाली कोई फाइल नहीं है।

आपको लगता है कि मैं उपयोग करना चाहूंगा -f, हालाँकि:

-f      Attempt to remove the files without prompting for confirmation, regardless of the file's permissions.  If the file does not exist, do not display a diagnostic message or modify the exit status to reflect an error.

और मैं ऐसा फ़ाइल permissions- अगर वहाँ कुछ अजीब हो रहा है, मैं बीच में बंद करें आदेश पसंद करते हैं के बारे में देखभाल। मैं केवल 'मौजूद नहीं' त्रुटियों को दबाना चाहता हूं।

मैंने 'rm त्रुटियों' के साथ कुछ अन्य प्रश्नों को देखा है, और इन दोनों को पाया है जो (थोड़े) प्रासंगिक हैं:

उनके नाम से फ़ाइलों और निर्देशिकाओं को हटा दें। ऐसी कोई फ़ाइल या डायरेक्टरी नहीं है

लेकिन, मुझे इस सवाल के जवाब में सब कुछ समझ में नहीं आ रहा है, और मुझे नहीं पता कि मुझे इसकी आवश्यकता है?

touchहैक इस सवाल में सुझाव दिया:

जब कोई फ़ाइल गायब हो, तो rm ने रिपोर्ट नहीं की है?

काम करने योग्य लगता है, जैसा कि मुझे नहीं लगता कि मुझे प्रदर्शन हिट लगता है (लेकिन आप किस प्रकार का प्रदर्शन करेंगे?

मुझे यकीन नहीं है कि मैं if-thenकमांड लाइन के भीतर कैसे करूँगा ।

क्या एक साधारण कमांड लाइन कट-एन-पेस्ट क्लीनअप के लिए कोई अन्य विकल्प हैं?

find -deleteमेरे मामले के लिए बेहतर काम करेगा ? यदि हां, तो क्यों?


प्रश्न में त्रुटि:

rm: 2*: No such file or directory

1
त्रुटि आपके शेल से है, नहीं rm, इसलिए आपको यह कहने की आवश्यकता होगी कि वह क्या है।
माइकल होमर

क्या आप zshअपने इंटरेक्टिव शेल के रूप में उपयोग कर रहे हैं ? क्या आपको कोई No matches foundत्रुटि हो रही है ?
Kusalananda

3
@MichaelHomer नहीं, त्रुटि rm से है। शेल केवल 2*फाइलों की एक सूची में विस्तार करने के बजाय आरएम पर स्ट्रिंग में पारित हो गया । प्रश्न में त्रुटि को देखें: यह कहता है कि आरएम शिकायत कर रहा है, न कि श / आधार / zsh / ...
doneal24

जवाबों:


13

केवल मौजूदा नियमित फ़ाइलों के rm -Pलिए कॉल करने के लिए जिनके नाम एक निर्देशिका में एक पैटर्न से मेल खाते हैं (लेकिन नीचे नहीं):

find directory -maxdepth 1 -type f -name 'pattern' -exec rm -P {} +

उदाहरण के लिए,

find ~/www/tmp/ -maxdepth 1 -type f -name '2*' -exec rm -P {} +

केवल गैर-निर्देशिका से मिलान करने के लिए ! -type d, के स्थान पर उपयोग करें -type f। अंतर यह है कि ! -type dफ़ाइल प्रकारों (प्रतीकात्मक लिंक, नामित पाइप, सॉकेट्स, आदि) की एक विस्तृत श्रृंखला के लिए सही होगा।

चूँकि आप मिली हुई फ़ाइलों पर कुछ शर्तों के लिए संकेत देना चाहते हैं, इसलिए आपको उस कार्य के बजाय इसका उपयोग नहीं करना चाहिए ।-delete-exec rmrm -f

उप-सीमाओं में पुनरावर्ती रूप से देखने के -maxdepth 1लिए निकालें find


3
हालांकि , मुझे लगता है कि ! -type dकरीब हो सकता rm 2*है?
मुरु

इसलिए, मुझे उस कार्यक्षमता को पाने के लिए -P जोड़ना होगा ?:find ~/www/tmp/ -maxdepth 1 -type f -name '2*' -exec rm -P {} +
user3082

@ user3082 हाँ, मैं भूल गया कि आप -Pभी उपयोग करना चाहते थे ।
Kusalananda

धन्यवाद @ ममरू, मैं वास्तव में चाहता हूं -type f, लेकिन यह नहीं जानता कि इस rmतरह का अभिनय कैसे किया जाए - इसलिए @ कुसलानाडा का सुझाव स्पॉट-ऑन था, और सीखने के लिए भेदभाव / स्पष्टीकरण महान है।
user3082

@ user3082 आपको संभवतः अपने शेल के विस्तारित rm 2*(.)ग्लोबिंग (जैसे, zsh में) का उपयोग करना होगा।
मुरु
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.