2012-02-15 17 views
34

Czy istnieje sposób automatycznego usuwania wszystkich plików lub folderów z kilkoma wierszami poleceń R? Jestem świadomy funkcji unlink() lub file.remove(), ale dla tych musisz zdefiniować wektor znaków z dokładnie wszystkimi nazwami plików, które chcesz usunąć. Szukam czegoś, co zawiera listę wszystkich plików lub folderów w określonej ścieżce (np. "C:/Temp"), a następnie usuwa wszystkie pliki o określonej nazwie (bez względu na jej rozszerzenie).Automatyczne usuwanie plików/folderów w R

Każda pomoc jest bardzo cenna!

Odpowiedz

39

Może szukasz kombinacji file.remove i list.files? Może coś takiego:

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

I chyba można filtrować listę plików w dół do tych, których nazwy pasują do określonego wzorca korzystając grep lub grepl, nie?

+2

I ewentualnie używając argumentu 'pattern' do 'list.files' (lub' dir', który jest synonimem). Myślę, że domyślnie generują wektor, więc należy zawinąć wokół nich wywołanie 'list', aby działało z' do.call'. – James

+1

Faceci, kiedy próbuję do.call tak jak powiedziałeś, otrzymuję komunikat o błędzie: [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE Komunikaty ostrzegawcze: 1: W funkcji (...): nie można usunąć pliku ' Sim2003.dbf ', reason' Brak takiego pliku lub katalogu ' – Francesco

+0

Który sprawia, że ​​wydaje się, że nie ma pliku (nie ma plików) w katalogu, który określam ... to jest trochę dziwne, ponieważ pliki tam są ... i jeśli po prostu używam pliku list.files ("C:/Temp"), daje mi to wszystko, co właściwe ... co robię źle? – Francesco

3

Używanie kombinacji dir i grep nie jest takie złe. Prawdopodobnie można to przekształcić w funkcję, która również wskaże, które pliki mają zostać usunięte, i daje szansę na przerwanie, jeśli nie jest to oczekiwane.

# 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' pobiera argument" wzór ", więc nie potrzebujesz osobnego użycia' grep'. –

+0

@RichieCotton Dobry punkt. Przyjmę to do wiadomości, ponieważ tak naprawdę nie używam reszty tak często, a grep wydawał mi się naturalnym rozwiązaniem. – 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 
)) 

Można również użyć unlink jako alternatywa dla file.remove.

+0

+1 Ładnie zrobione! – joran

+0

Co zrobić, jeśli chcę usunąć pliki, dla których ich indeks pozycji nie jest wyświetlany w wektorze indeksu pozycji? Na przykład pliki to: a.txt, b.txt, c.txt i mój wektor v <- c (1, 3). Wynik powinien pokazywać tylko pliki: a.txt i c.txt – Nanami

+0

@Nanami: Przeczytaj http://www.regular-expressions.info/quickstart.html i '? Regex'. Jeśli nadal utkniesz, zadaj pytanie z tagiem 'regex'. –

15

Dla wszystkich plików w znanej ścieżce można:

unlink("path/*") 
+7

Dlaczego to nie jest najlepiej ocenione rozwiązanie? Działa to cudownie. – Zediiiii

+1

Jedna rzecz do zapamiętania: ta metoda usuwa wszystko na dobre; plików nie można odzyskać w koszu recyklingu. –

0

usunąć pliki z konkretnym rozszerzeniem, to link może również być stosowana,

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