Як видалити все в каталозі?


25

Як видалити все в каталозі, включаючи приховані файли та каталоги?

Зараз я використовую наступне:

rm -rf *
rm -rf .*

5
Ви можете їх поєднувати rm -rf .* *.
користувач невідомий

2
Ви можете підняти один каталог вгору, а потім запуститиrm -rf yourdirectory/*
shreyansp

1
Вибачте пропустив приховану частину каталогу. Попереднє рішення користувачів охоплює це
shreyansp

Цей другий варіант, який ви розмістили, дуже небезпечний. Він буде відповідати ..каталогу, який видалить все, що знаходиться в каталозі вище .
Річард Петерсон

Відповіді:


17

Простий і прямий вперед:

find -delete 

Включає каталоги та приховані файли. Принаймні gnu-find знає -delete, ваші findможуть відрізнятися.


1
Щоб уникнути видалення каталогу, використовуйте find /path -delete -mindepth 1.
orodbhen

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

11

Найкраща відповідь: Не робіть цього. Рекурсивно видаліть сам каталог, а потім відтворіть його як порожній каталог. Іншим людям надійніше і простіше зрозуміти, що ви намагаєтеся зробити. При повторному створенні каталогу він може мати іншого власника, групу та дозволи. Якщо це важливо, будьте обережні. Крім того, якщо будь-які запущені програми мають в каталозі ручки відкритих файлів (дескриптори), ви не хочете їх видаляти. Якщо жоден із цих особливих випадків не застосовується, тоді простіше видалити весь каталог.


7
То як же простіше. "Будьте уважні" - це не відповідь. Я б не зрозумів, чому хтось видаляє каталог і відновлює його знову.
користувач невідомий

Я додав фразу "як порожній каталог", можливо, це більш зрозуміло.
Кріс Квенелль

2
Ні, це не пояснює, чому ви видаляєте каталог і відтворюєте його потім. До речей, що слід розглядати, належить, btw., Дата / час створення також.
користувач невідомий

2
Якщо цей каталог є поточним робочим каталогом якогось процесу, у вас можуть виникнути проблеми. Крім того, якщо ви видалите каталог, ви видалите інформацію про його дозволи та права власності.


5

Припустимо, що грає 4+:

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

Якщо увімкнено dotglob, він *розширюється на всі файли та каталоги, навіть на ті, що починаються з .- але не розширюється на .і .., тому його безпечно використовувати rm.


2

якщо ви знаходитесь в каталозі:

cd .. && rm -rf dir && mkdir dir && cd dir

інакше:

rm -rf /path/to/dir && mkdir /path/to/dir


2

О мій Зш

rm -rf (.|)*

Знову ж таки, це лише для Zsh.


2
Або *(D)( Dкласифікатор глобу вмикає glob_dotsопцію для цього шаблону).
Жил 'ТАК - перестань бути злим'

Або rm -rf {.,}*( в відміну від Баша, ЗШ не включає в себе .і ..в {.,}*, по крайней мере , на моїй машині).
саша

1

Як щодо використання find. Я думаю, що це, як правило, хороший вибір, коли вам доведеться копатись під підкаталогами.

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

1
є перемикач -delete, тому ви можете видаляти каталоги. (принаймні, у gnu-find).
користувач невідомий

це не видалить підкаталоги
sasha

-2

Спробуйте rm -rf *?*. Це видалить звичайні та приховані файли.


4
Не в жодній оболонці, про яку я знаю.
Жил "ТАК - перестань бути злим"

Ви праві. він не видаляє підкаталоги.
gladimdim

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