आर

2012-02-15 42 views
34

में फ़ाइलों/फ़ोल्डरों को स्वचालित रूप से हटाएं क्या कुछ आर कमांड लाइनों के साथ सभी फ़ाइलों या फ़ोल्डरों को स्वचालित रूप से हटाने का कोई तरीका है? मुझे unlink() या file.remove() फ़ंक्शंस के बारे में पता है, लेकिन उन लोगों के लिए जिन्हें आप उन फ़ाइलों के बिल्कुल नामों के साथ एक चरित्र वेक्टर को परिभाषित करने की आवश्यकता रखते हैं जिन्हें आप हटाना चाहते हैं। मैं किसी ऐसी चीज़ के लिए और अधिक देख रहा हूं जो सभी फ़ाइलों या फ़ोल्डर्स को किसी विशिष्ट पथ (जैसे 'सी:/टेम्प') में सूचीबद्ध करता है और फिर किसी निश्चित नाम के साथ सभी फ़ाइलों को हटा देता है (इसके विस्तार के बावजूद)।आर

किसी भी मदद की बहुत सराहना की है!

उत्तर

39

शायद आप file.remove और list.files के संयोजन की तलाश कर रहे हैं? हो सकता है कि कुछ इस तरह:

do.call(file.remove, list(list.files("C:/Temp", full.names = TRUE))) 

और मैं तुम्हें उन जिनके नाम grep या grepl, कोई का उपयोग कर एक निश्चित पैटर्न मिलान करने के लिए नीचे फ़ाइलों की सूची फ़िल्टर कर सकते हैं लगता है?

+2

और संभवतः 'pattern' तर्क का उपयोग 'list.files' (या 'dir'' जो समानार्थी है)। मुझे लगता है कि वे डिफ़ॉल्ट रूप से एक वेक्टर उत्पन्न करते हैं, इसलिए 'do.call' के साथ काम करने के लिए उनके चारों ओर एक' सूची 'कॉल को लपेटने की आवश्यकता है। – James

+1

दोस्तों, जब मैं do.call की कोशिश करता हूं जैसे आपने कहा कि मुझे यह त्रुटि संदेश मिलता है: [1] झूठी झूठी झूठी झूठी झूठी झूठी झूठी झूठी चेतावनी संदेश: 1: फ़ंक्शन (...): फ़ाइल को हटा नहीं सकता है ' Sim2003.dbf ', कारण' ऐसी कोई फ़ाइल या निर्देशिका नहीं ' – Francesco

+0

जो ऐसा लगता है कि निर्देशिका में निर्दिष्ट कोई फ़ाइल नहीं है (कोई फाइल नहीं है) ... जो कि फाइलें हैं क्योंकि थोड़ी अजीब है ... और अगर मैं सिर्फ list.files ('C:/Temp') का उपयोग करता हूं तो यह मुझे सभी सही देता है ... मैं क्या गलत कर रहा हूं? – Francesco

3

डीआईआर और grep के संयोजन का उपयोग करना यह बहुत बुरा नहीं है। यह शायद एक फ़ंक्शन में बदल दिया जा सकता है जो आपको यह भी बताता है कि कौन सी फाइलों को हटाया जाना है और यदि आपको उम्मीद नहीं है तो यह रद्द करने का मौका देता है।

# Which directory? 
mydir <- "C:/Test" 
# What phrase do you want contained in 
# the files to be deleted? 
deletephrase <- "deleteme" 

# Look at directory 
dir(mydir) 
# Figure out which files should be deleted 
id <- grep(deletephrase, dir(mydir)) 
# Get the full path of the files to be deleted 
todelete <- dir(mydir, full.names = TRUE)[id] 
# BALEETED 
unlink(todelete) 
+0

'dir' एक 'पैटर्न' तर्क लेता है, इसलिए आपको 'grep' के अलग-अलग उपयोग की आवश्यकता नहीं है। –

+0

@RichieCotton अच्छा बिंदु। मैं इस बारे में ध्यान रखूंगा क्योंकि मैं वास्तव में अक्सर डीआईआर का उपयोग नहीं करता हूं और grep मेरे लिए एक प्राकृतिक समाधान की तरह लग रहा था। – Dason

17
dir_to_clean <- tempdir() #or wherever 

#create some junk to test it with 
file.create(file.path(
    dir_to_clean, 
    paste("test", 1:5, "txt", sep = ".") 
)) 

#Now remove them (no need for messing about with do.call) 
file.remove(dir( 
    dir_to_clean, 
    pattern = "^test\\.[0-9]\\.txt$", 
    full.names = TRUE 
)) 

तुम भी file.remove के विकल्प के रूप unlink उपयोग कर सकते हैं।

+0

+1 अच्छी तरह से किया गया! – joran

+0

क्या होगा यदि मैं उन फाइलों को हटाना चाहता हूं जिनके लिए उनकी स्थिति इंडिस स्थिति इंडिस वेक्टर में नहीं दिखती है? उदाहरण के लिए, फ़ाइलें हैं: a.txt, b.txt, c.txt और मेरे वेक्टर v <- c (1, 3)। परिणाम केवल फाइलें दिखाना चाहिए: a.txt और c.txt – Nanami

+0

@ नानामी: http://www.regular-expressions.info/quickstart.html और 'regex' पढ़ें। यदि आप अभी भी अटक गए हैं, तो टैग 'regex' के साथ एक प्रश्न पूछें। –

15
एक ज्ञात पथ आप कर सकते हैं में सभी फ़ाइलों के लिए

:

unlink("path/*") 
+7

यह उच्चतम मतदान समाधान क्यों नहीं है? यह अद्भुत काम करता है। – Zediiiii

+1

ध्यान देने योग्य एक बात: यह विधि सब कुछ अच्छी तरह से हटा देती है; रीसाइक्लिंग बिन के भीतर फ़ाइलों को पुनर्प्राप्त नहीं किया जा सकता है। –

0

किसी विशेष एक्सटेंशन की फ़ाइलों को निकालने के लिए यह link भी पीछा किया जा सकता है,

junk <- dir(path="your_path", pattern="your_pattern") 
file.remove(junk)