Как удалить все файлы в каталоге?

Я всегда предполагал, что это должно было предложить разный каталог, как, "и т.д. = все остальные мы не потрудились категоризировать далее"; я лично еще использую такую папку также на моем корневом каталоге также (не названный и т.д., но "весла" =" (что-то)").

77
08.01.2012, 16:37
14 ответов

Если Ваш каталог верхнего уровня называют images, затем выполненный rm -r images/*. Это использует оператор шарика оболочки * работать rm -r на каждом файле или каталоге в images.

60
27.01.2020, 19:31

синтаксис комнаты:

rm [OPTION]... FILE...

Так, необходимо заявить соответствующий путь явно, например.

rm -r sub_dir/
0
27.01.2020, 19:31

Попробуйте эту версию:

 rm -r test/*
6
27.01.2020, 19:31
  • 1
    Это не удалит скрытые файлы (запускающиеся с). –  gbmhunter 05.03.2015, 00:59

Для удаления скрытых файлов необходимо указать:

rm -r images/* images/.*

С оболочками, шарики которых включают . и .., это приведет к ошибке как

rm: cannot remove `.' directory `images/.'
rm: cannot remove `..' directory `images/..'

но это удалит скрытые файлы.

Подход без errormessage должен использовать, находят/удаляют с mindepth. Это - находка гну.

find images -mindepth 1 -delete

Вашей находке может недоставать -mindepth или -delete предикат, в этом случае, Вы могли сделать:

find images/. ! -name . -prune -exec rm -rf {} +
52
27.01.2020, 19:31
  • 1
    Мое предложение состояло в том, чтобы использовать 'комнату-r, отображает/.*' который соответствовал бы 'изображениям/..' но не 'отображает/../..'. Рекурсия не может пойти вверх, начиная с 'изображения/../images/..' снова тот же каталог. –  user unknown 26.05.2015, 07:39
  • 2
    @DarkHeart rm .* не удаляет . или .. и не имеет с тех пор, по крайней мере, 1994 для GNU utils и вероятно с конца 70-х для UNIX. Крайне маловероятно, что Вы найдете систему где rm .* пересекает файловую систему вверх за пределами музея. –  terdon♦ 08.12.2015, 13:36

Для удаления всех файлов и каталогов (включая скрытые) в каталоге можно попробовать следующее:

  • использовать ls -Ab соответствовать всем файлам/каталогам

    cd dir_name && rm -rf `ls -Ab`
    
  • использовать find соответствовать всем файлам/каталогам

    find dir_name -mindepth 1 -delete
    

    или, если Ваш find не поддерживает -delete:

    find dir_name -mindepth 1 -exec rm -rf {}
    
  • удалите папку, затем воссоздайте ее

    rm -rf dir_name && mkdir dir_name
    
  • в ударе,

    shopt -s dotglob  
    rm -rf dir_name/*
    
21
27.01.2020, 19:31
  • 1
    Отметьте ту команду как rm -rf * не безопасно, если Вы не знаете о файлах в каталоге, потому что файл, запускающийся с - (дефис) будет интерпретироваться как rm флаг... –  VasyaNovikov 08.04.2017, 16:52
  • 2
    РЕДАКТИРОВАНИЕ: чтобы сделать это безопасный, использовать rm -rf ./* ./.* –  VasyaNovikov 08.04.2017, 16:54

Я использую команду find здесь:

Шаг 1: Найти все файлы и удалить их :

find /path/to/directory/ -type f -exec rm {} \;

Пример:

find /home/user/Desktop/images/ -type f -exec rm {} \;

Шаг 2: Найти все подкаталоги и удалить их :

find /path/to/directory/ -type d -exec rm -R {} \;
3
27.01.2020, 19:31

Удалите папку «Тест» и все файлы внутри:

 rm -r test

Удалите все файлы внутри, но сохраняйте папку «Тест»:

 rm -r test/*
-2
27.01.2020, 19:31

cd в папку, затем выполните следующую команду:

ls |xargs rm -rf
-4
27.01.2020, 19:31

Вы можете удалить каталог, используя следующую команду:

sudo rm -r directoryname1/2/3/*

После 3/* будет удален весь каталог.

Пример sudo rm -r Downloads/song/*

Удаляются все файлы, находящиеся в пределах Downloads/songs.

0
27.01.2020, 19:31

Чтобы удалить все обычные файлы рекурсивно внутри каталога, достаточно этой команды (при условии, что GNU или FreeBSD find):

find . -type f -delete

Остаются все нерегулярные файлы, такие как симлинки (независимо от того, указывают они на обычные файлы или нет), каталоги, fifos, сокеты, устройства....

См. также:

find . ! -type d -delete

для удаления файлов любого типа, кроме каталога.

9
27.01.2020, 19:31

Вопрос состоял в том, чтобы очистить каталог = удалить содержимое каталога, включая скрытые файлы, но не сам каталог. Команда find с -mindepth 1 на самом деле является правильным способом, но во избежание ошибки сообщения он должен быть объединен с -maxdepth 1:

find /path/to/dir -mindepth 1 -maxdepth 1 -exec rm -rf '{}' \;
3
27.01.2020, 19:31

Это отлично работает для меня, каждый раз проверял несколько вариантов.

Из каталога, в котором находится каталог изображений.

rm -frd ./images/*

до:

images/
    |_ header.png
    |_ footer.png
    |_ subdir/

после:

images/
0
27.01.2020, 19:31

Чтобы удалить все файлы и подкаталоги в текущем каталоге, включая скрытые, без сообщения об ошибке:

rm -rf .[^.] .??* *

Или из родительского каталога:

rm -rf images/.[^.] images/.??* images/*

Из https://serverfault.com/a/47940/269538.

0
27.01.2020, 19:31

Другой вариант:

$ rm -rf /path/to/directory/{*,.*}

источник:https://askubuntu.com/a/552834/56648

1
27.01.2020, 19:31

Теги

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