लिनक्स में एक निश्चित स्ट्रिंग के साथ शुरू होने वाली सभी फ़ाइलों को कैसे हटाएं


36

मुझे NAMEनिर्देशिका ट्री में नाम के साथ शुरू होने वाली सभी फ़ाइलों को खोजने और एक शेल कमांड का उपयोग करके इन सभी फ़ाइलों को निकालने की आवश्यकता है।

जवाबों:


1

उन सभी फ़ाइलों को हटाने के लिए जिनका नाम है --- आप उपयोग कर सकते हैं

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

1
आप एक 'आरएम' तर्क के रूप में -f भी जोड़ सकते हैं ताकि आपको "एक्स फ़ाइल को हटाने के लिए सुनिश्चित करें" क्या आप सुनिश्चित नहीं हैं?
यूटाहजहेड

किस संस्करण grepमें एक -execस्विच है?
बेन ग्राहम

इस टिप्पणी में गिरावट क्यों है?
Ultrasonic54321

64

वर्तमान निर्देशिका और इसकी उप-निर्देशिकाओं में सभी फाइलें हटाएं जहां फ़ाइल का नाम "फू" से शुरू होता है:

$ find . -type f -name foo\* -exec rm {} \;

एनबी: सावधानी के साथ उपयोग करें - पहले बैक अप करें - पहले सूखा रन भी करें, जैसे

$ find . -type f -name foo\*

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


5
मैं 2million फ़ाइलों पर नष्ट करने के लिए किया था और मुसीबत में चलाने के लिए, find . -type f -name foo\* -deleteकिया चाल
लिनस

25

मैं इस तरह से यह मेरे लिए काम कर रहा है की कोशिश की है नीचे आदेश की कोशिश करो।

rm -rf Example*

यहाँ "उदाहरण" पाठ है जो सभी फाइलों के लिए सामान्य है।


4
यकीन नहीं होता कि यह सबसे ज्यादा वोट देने वाला जवाब क्यों नहीं है ....
DanTheMan

@DanTheMan यह इसलिए है क्योंकि यह अन्य उत्तरों की तुलना में ~ 4 साल नया है। यह निश्चित रूप से सबसे सरल जवाब है।
जोशाकॉक्रेले

10

आप उपयोग कर सकते हैं find:

find . -name "name*" -exec rm {} \;

इसके अलावा निर्दिष्ट करने के बजाय '।' आप एक पूर्ण पथ निर्दिष्ट कर सकते हैं।
यूटाजार्हेड

3

साथ globstarविकल्प (के साथ सक्षम shopt -s globstar):

rm -f **/NAME*

**/फैलता करने के लिए ./, */, */*/, */*/*/आदि यदि आप एक है, तो निर्देशिका के साथ शुरू नाम NAME, आदेश में शिकायत करेंगे कि rmनिर्देशिका नहीं निकाल सकते, लेकिन इतना ही है।

ध्यान दें कि यह कमांड लाइन की लंबाई की सीमाओं में चल सकता है यदि ग्लोब कई फाइलों से मेल खाता है।

वैकल्पिक रूप से, rmसंभव के रूप में कुछ चालान के साथ, लेकिन किसी भी कमांड लाइन की लंबाई सीमाओं के अधीन नहीं:

find . -type f -name 'NAME*' -exec rm -f {} +

( कथन को बंद करने के +बजाय नोटिस करें ।)\;-exec


2

find . -name 'foo'* -type f -delete सबसे सरल उत्तर की तरह लगता है।

आप इसे बिना -deleteझंडे के चला सकते हैं इससे पहले कि कौन सी फाइलें हटाई जाएंगी।


-2

फ़ाइल / फ़ोल्डर के "इनोड" नंबर के लिए खोजें और फिर इनकोड संख्या का उपयोग करके हटाएं। नीचे एक उदाहरण है:

ls -il
3407873 drwxr-xr-x. 2 root   root      4096 Mar 30 07:49 p

find . -inum 3407873 -exec rm -rf {} \;

यह एक अच्छा जवाब है - एक अलग सवाल पर। यह इस सवाल का जवाब नहीं है ।
स्कॉट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.