Как мне удалить все в каталоге?


25

Как удалить все в каталоге, включая скрытые файлы и каталоги?

Прямо сейчас я использую следующее:

rm -rf *
rm -rf .*

5
Вы можете объединить их с rm -rf .* *.
пользователь неизвестен

2
Вы можете перейти на один каталог вверх и затем выполнитьrm -rf yourdirectory/*
shreyansp

1
извините пропустил скрытую часть каталога. Решение предыдущих пользователей охватывает это
shreyansp

Второй вариант, который вы опубликовали, очень опасен. Он будет соответствовать ..каталогу, который удалит все, что находится в каталоге выше .
Ричард Петерсон

Ответы:


17

Просто и прямо:

find -delete 

Включает каталоги и скрытые файлы. По крайней мере, гну-найти знает -delete, ваш findможет отличаться.


1
Чтобы избежать удаления каталога, используйте find /path -delete -mindepth 1.
orodbhen

@orodbhen: find -delete не удалит каталог, в котором вы запускаете команду (как в вопросе с rm).
пользователь неизвестен

11

Лучший ответ: не делай этого. Рекурсивно удалите сам каталог, а затем воссоздайте его как пустой каталог. Другим людям легче и проще понять, что вы пытаетесь сделать. При повторном создании каталога он может иметь другого владельца, группу и разрешения. Если это важно, будьте осторожны. Кроме того, если какие-либо работающие программы имеют открытые файловые дескрипторы (дескрипторы) в каталоге, вы не захотите его удалять. Если ни один из этих особых случаев не применим, тогда проще удалить весь каталог.


7
Так как же это проще? «Будь осторожен» - это не ответ. Я не понимаю, почему кто-то удаляет каталог и перестраивает его снова.
пользователь неизвестен

Я добавил фразу «как пустой каталог», возможно, это более понятно.
Крис Кнель

2
Нет, это не объясняет, почему вы удаляете каталог и затем воссоздаете его. К вещам, которые нужно учитывать, относится, между прочим, дата / время создания.
неизвестный пользователь

2
Если этот каталог является текущим рабочим каталогом какого-либо процесса, вы можете столкнуться с проблемами. Также, если вы удаляете каталог, вы удаляете информацию о его разрешениях и владении.

8
rm -rf -- * .[!.]* ..?*

Каждый из трех шаблонов расширяется до самого себя, если он ничего не соответствует, но это не проблема, поскольку мы хотим сопоставить все и rm -fигнорировать несуществующие аргументы.

Обратите внимание, что .*будет соответствовать.. .


5

Предполагая bash 4+:

shopt -s dotglob
rm -rf -- *
##or:
rm -rf ./*

С включенным dotglob, *расширяется на все файлы и каталоги, даже те, которые начинаются с .- но не расширяются до .и .., так что это безопасно для использования rm.




1

Как насчет использования find. Я думаю, что в целом это хороший выбор, когда нужно копаться в подкаталогах.

find . -type f -exec rm {} \;

1
есть ключ -delete, так что вы можете удалять каталоги. (по крайней мере, в GNU-найти).
пользователь неизвестен

это не удалит подкаталоги
саша

-2

Попробуй rm -rf *?*. Это удалит нормальные и скрытые файлы.


4
Не в любой оболочке, о которой я знаю.
Жиль "ТАК ... перестать быть злым"

ты прав. он не удаляет подкаталоги.
gladimdim

4
Скорее всего, проблема заключается в том, что *?*они не будут соответствовать «точечным» файлам / каталогам (если вы не включили dotglobопцию в bash , GLOB_DOTSопцию в zsh или эквивалент для любой используемой вами оболочки).
Крис Джонсен
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.