Удаление файлов из каталога с помощью списка [duplicate]

В моем случае мне понадобился доступ root.

43
задан Jaap 5 May 2018 в 07:33
поделиться

4 ответа

Возможно, вы просто ищете комбинацию file.remove и list.files? Возможно, что-то вроде:

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

И я думаю, вы можете отфильтровать список файлов до тех, чьи имена соответствуют определенному шаблону с использованием grep или grepl, no?

48
ответ дан MichaelChirico 17 August 2018 в 09:45
поделиться
  • 1
    И возможно, используя аргумент pattern для list.files (или dir, который является синонимом). Я думаю, что они создают вектор по умолчанию, поэтому вам нужно обернуть вокруг него list вызов для работы с do.call. – James 15 February 2012 в 17:56
  • 2
    Ребята, когда я пытаюсь сделать do.call, как вы сказали, я получаю это сообщение об ошибке: [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE Предупреждающие сообщения: 1: В функции (...): невозможно удалить файл 'Sim2003.dbf' , причина «Нет такого файла или каталога» – Francesco 15 February 2012 в 18:29
  • 3
    Кажется, что нет файла (нет файлов) в каталоге, который я указываю ... это странно странно, поскольку файлы есть ... и если я просто использую list.files ('C: / Temp ') это дает мне все правильные ... что я делаю неправильно? – Francesco 15 February 2012 в 18:31
  • 4
    Хорошо, я решил ... вам нужно добавить full.names = TRUE внутри функции list.files () ... иначе он не найдет их только с относительным путем ... – Francesco 15 February 2012 в 18:36
  • 5
    Вам не нужно do.call; см. мой ответ. – Richie Cotton 15 February 2012 в 19:20

Используя комбинацию dir и 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)
4
ответ дан Dason 17 August 2018 в 09:45
поделиться
  • 1
    dir принимает аргумент pattern, поэтому вам не требуется отдельное использование grep. – Richie Cotton 15 February 2012 в 19:09
  • 2
    @RichieCotton Хорошая точка. Я обращу внимание на это, поскольку на самом деле я не использую dir, что часто и grep казались естественным решением для меня. – Dason 15 February 2012 в 21:23

Для всех файлов в известном пути вы можете:

unlink("path/*")
26
ответ дан Hahnemann 17 August 2018 в 09:45
поделиться
  • 1
    Почему это не является самым высоким решением? Это прекрасно работает. – Zediiiii 24 March 2016 в 19:55
  • 2
    Одно замечание: этот метод удаляет все навсегда; файлы не могут быть восстановлены в корзине. – Dale Kube 30 June 2017 в 02:37
  • 3
    Лучшее решение, но иногда это не работает. recursive=TRUE & amp; force=TRUE помогает. Я на Linux. – Ufos 17 April 2018 в 11:07
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
))

Вы также можете использовать unlink в качестве альтернативы file.remove.

21
ответ дан Richie Cotton 17 August 2018 в 09:45
поделиться
  • 1
    Что делать, если я хочу удалить файлы, для которых их индекс позиции не отображается в векторе индексов позиции? Например, файлы: a.txt, b.txt, c.txt и мой вектор v & lt; - c (1, 3). В результате должны отображаться только файлы: a.txt и c.txt – Nanami 23 July 2013 в 12:51
  • 2
    @Nanami: прочитайте regular-expressions.info/quickstart.html и ?regex. Если вы все еще застряли, задайте вопрос с тегом regex. – Richie Cotton 25 July 2013 в 10:38
  • 3
    Благодарю. Я использовал это в своем коде, хотя в конечном итоге я удалил ^ и $ в своем регулярном выражении, и я думаю, что это изменение, которое заставило его работать. Не могу сказать, что я проверил это полностью. – Leonid 29 May 2017 в 21:15
Другие вопросы по тегам:

Похожие вопросы: