क्या 'rm files *' सभी उप-निर्देशिकाओं से सभी मैच हटाता है?


13

मैं ऐसी किसी भी फ़ाइल को निकालना चाहता हूं wordpress-891.sqlजो वर्तमान निर्देशिका (उप-निर्देशिका के अंदर नहीं) की तरह दिखती हो ।

विल rm wordpress-*.sqlचाल कर सकते हैं या यह भी एक उप-निर्देशिका से मेल खाता है निकाल देंगे?


1
एक तरफ के रूप में, जबकि अन्य सभी उत्तर सही समाप्त होते हैं, एक और मोड़ है: यह वास्तव में बैश है, आरएम कमांड नहीं, जो वाइल्डकार्ड का विस्तार करता है। यदि आपकी निर्देशिका में दस मिलान फ़ाइलें हैं, तो rm वाइल्डकार्ड नहीं देखेगा, बल्कि दस व्यक्तिगत तर्क देगा। यदि आप rm को विस्तार करना चाहते हैं, तो आपको अपना तर्क एकल उद्धरणों में संलग्न करना होगा। आरएम के लिए, इससे कोई फर्क नहीं पड़ता, लेकिन कुछ अन्य संदर्भों में यह हो सकता है। आमतौर पर, जब वाइल्डकार्ड फाइलों के अलावा किसी अन्य चीज को संदर्भित करता है, जैसे कि उपयुक्त-प्राप्त पैकेज।
केविन कीन

3
@KevinKeane, rmफ़ाइल नाम का विस्तार नहीं करता है ... rm "foo*"नाम में शाब्दिक तारांकन के साथ फ़ाइल को निकालने का प्रयास करेगा।
इलकाचु

जवाबों:


20

सामान्य ग्लोबिंग *पुनरावर्ती नहीं है और न ही है rm

यदि कोई निर्देशिका नाम मेल खाता है, तो उसे हटाया नहीं जाएगा - -rनिर्देशिका को हटाने के लिए आपको ध्वज की आवश्यकता है ।

इसलिए यह करना सुरक्षित है कि यदि आप सुनिश्चित हैं कि आप उन फ़ाइलों को हटाना चाहते हैं।

आप rmइंटरेक्टिव भी बना सकते हैं

rm -i wordpress-*.sql

तब यह प्रत्येक फ़ाइल को हटाने से पहले पुष्टि के लिए पूछेगा


14

हाँ, यह आपके लिए चाल चलता है और मौजूदा निर्देशिका में उस स्कीमा के साथ सभी फ़ाइलों को हटा देता है। और नहीं, यह उप-निर्देशिकाओं के भीतर फ़ाइलों को नहीं हटाता है।

जब आप निश्चित नहीं होते हैं कि जब आप एक कमांड चलाते हैं तो क्या होता है:

rm wordpress-*.sql

तो बस इसे चलाने का उपयोग कर ls:

ls wordpress-*.sql

फ़ाइलें जो आप आउटपुट में देखते हैं, वे हैं जिन्हें हटा दिया जाएगा।

जब आप एक सूची प्राप्त करने की कोशिश कर रहे हैं जैसे:, नाम के साथ निर्देशिका आदि फ़ाइलों को सूचीबद्ध करने से रोकने के foo*लिए -dस्विच का उपयोग करना बेहतर है ।lsfoobar/

ls -d foo*

यह ट्रिक उन कमांड्स के लिए काम करती है, जिनका इस्तेमाल दोबारा काम करने के लिए नहीं किया जाता है।

दूसरी चीज़ जो आप कर सकते हैं, वह है अपना वांछित इनपुट टाइप करना, जैसे: wordpress-*फिर Ctrl+ Alt+ दबाएँ *, और अब सभी मैच आपके कमांड के सामने अपने आप टाइप हो जाते हैं।


4
मेरी पसंदीदा विधि:printf "%s\n" wordpress-*.sql
wjandrea

1
आप भी इको की तरह दिखावा कर सकते हैं echo rm file*। विशेष रूप से शत्रुतापूर्ण फ़ाइल नाम के लिए देखो की तरह-rf
Eckes

@eckes: आप उन rm ./*या तो के साथ या अधिक सुरक्षित रूप से कवर कर सकते हैं rm -- *
डेविड फ़ॉस्टर

हाँ, या उपयोग xargs -0@DavidFoerster
Eckes

यदि आप जाते हैं ls foo*और आपके पास एक निर्देशिका है foobar, तो आपको उस निर्देशिका की सामग्री की एक सूची भी मिलती है, इसलिए सादे lsवास्तव में सबसे अच्छा तरीका नहीं है जो rmहिट होगा
ilkkachu

12

नहीं, rmउपनिर्देशिकाओं के माध्यम से पुनरावृत्ति नहीं करता है।

देखें SuperUser - सभी सबडायरेक्टरियों में हटाएं मिलान फ़ाइलों उपनिर्देशिका में से फ़ाइलें हटाकर के लिए तरीके के लिए।

यदि आप कभी भी गलती से किसी महत्वपूर्ण चीज़ को हटाने के बारे में चिंतित हैं, तो (जो स्थायी रूप से फ़ाइलों को हटाता है gvfs-trash) के बजाय उपयोग करें (जो फ़ाइलों को ट्रैश में भेजता है rm)।


gvfs-trashउल्लेख के लिए धन्यवाद कुछ सीखा आज शायद ही इसका इस्तेमाल करें ...
जॉर्ज उडोसन

-1

यदि आप सभी मिलान फ़ाइलों को खोजना और हटाना wordpress-*.sqlचाहते हैं, जैसे कि आप findकमांड का उपयोग कर सकते हैं । :)

उदाहरण के लिए, आप के साथ सभी मिलान फ़ाइलें निकालने के लिए चाहते हैं wordpress-*.sqlके तहत test_dir, निम्नलिखित की तरह करते हैं।

cd test_dir
find . -name "wordpress-*.sql" -exec rm -f {} \;

जब भी findप्रोग्राम वास्तव में एक मिलान फ़ाइल पाता है, तो यह -execविकल्प के बाद एक कमांड निष्पादित करने की कोशिश करता है । इस मामले में rm -f {}निष्पादित किया {}जाएगा और मैच फ़ाइल नाम में बदल दिया जाएगा। उदाहरण के लिए

rm -f wordpress-169.sql

आप -maxdepthविकल्प के साथ उप-निर्देशिकाओं की गहराई भी निर्धारित कर सकते हैं ।

cd test_dir
find . -maxdepth 3 -name "wordpress-*.sql" -exec rm -f {} \;

कृपया ध्यान दें कि आपको -maxdepthअन्य विकल्पों से पहले विकल्प निर्दिष्ट करना होगा । अन्यथा आप उन परिणामों को पूरा कर सकते हैं जो आप वास्तव में नहीं देखना चाहते हैं।


1
ओपी विपरीत चाहता है: उपनिर्देशिकाओं में पुनरावृत्ति न करने के लिए।
मेलेबियस

2
जीएनयू पाते हैं: "विकल्प सभी परीक्षणों को प्रभावित करते हैं, जिसमें विकल्प से पहले निर्दिष्ट परीक्षण शामिल हैं", नीचे दिए गए विकल्पों की सूची शामिल है -maxdepth-exec rm -f {} +इसके बजाय का उपयोग करें -exec \;, या बेहतर अभी तक, बस-delete
ilkachachu
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.