2009-05-04 1 views
101

Я знаю, что это удалит все в каталоге и под ним:В Unix, как вы удаляете все в текущем каталоге и под ним?

rm -rf <subdir-name> 

Но как вы удалите все, что в текущем каталоге, а также каждый подкаталог под ней и содержимое всех подкаталогов?

+1

Это должно быть обманом: http://stackoverflow.com/questions/550922/how-to-delete-all-files-from-current-directory-including-current-directory – jmucchiello

ответ

158

Практика безопасного вычисления. Просто зайдите на один уровень вверх в иерархии и не использовать подстановочное выражение:

cd ..; rm -rf -- <dir-to-remove> 

два дефиса -- сказать rm, что <dir-to-remove> не параметр командной строки, даже если он начинается с тиром.

+6

Почему это безопаснее? – Yen

+33

Потому что вы точно соответствуете названному каталогу и, следовательно, с меньшей вероятностью удаляете то, что вы не собираетесь удалять. – tvanfosson

+5

Правда. Я мог видеть, что я делаю это довольно легко. – Yen

21

Использование

rm -rf * 

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

Безопаснее версия ИМО является использование:

rm -ri * 

(. Это запрос на подтверждение перед удалением каждого файла/каталога)

+11

«Может быть рискованным», - это странно лаконично. – 2009-05-04 16:19:09

+5

Когда я делаю что-то вроде этого, я нашел быстрый ls -r. Сначала вы можете увидеть, что собираетесь удалить. Полезно дать краткое представление о том, что вы не собираетесь для удаления всего диска ... –

+2

Почему он более рискован, чем rm -rf ? – Yen

4

сделать уверен вы находитесь в правильном каталоге

 
rm -rf * 
+2

Это не удаляет файлы или подкаталоги, имя которых начинается с периода. – 2009-05-04 16:18:29

+1

true. в моем тестировании также нет rm -rf. tvanfosson имеет лучшее решение IMO с его «cd ..; rm -rf » – digitaljoel

5

rm -rf *

Не делай этого, это опасно. УБЕДИТЕСЬ, ЧТО ВЫ В ПРАВОЙ СПРАВОЧНИКЕ.

41

Удалит все файлы/каталоги под текущим.

find -mindepth 1 -delete 

Если вы хотите сделать то же самое с другим каталогом, имя которого у вас есть, вы можете просто назвать, что

find <name-of-directory> -mindepth 1 -delete 

Если вы хотите удалить не только подкаталоги и файлы этого, но также и сам каталог, опустите -mindepth 1. Сделайте это без -delete, чтобы получить список вещей, которые будут удалены.

+0

Мне нужно было удалить все файлы в подкаталогах, но не захотели удалять сами подкаталоги. найти <имя-of-direcotry> -mindepth 2 -delete отлично работает! –

+0

Вам нужно '-mindepth 1', если вы указываете каталог (' find <имя-каталога -mindepth 1 -delete'). В противном случае Johannes прав, он не удалит текущий рабочий каталог (при использовании 'find -delete'). – Weboide

+0

IMO, это лучший ответ, особенно в скриптах. – wizonesolutions

5

Правильно, что rm –rf . удалит все в текущем напрямую, включая любые подкаталоги и их содержимое. одноточечная (.) означает текущий каталог. будьте осторожны, чтобы не делать rm -rf .., так как double dot (..) означает предыдущий каталог.

Это, если вы похожи на меня и одновременно открываете несколько окон терминала, вам лучше быть в безопасности и использовать rm -ir . Давайте рассмотрим аргументы команды, чтобы понять, почему.

Во-первых, если вы посмотрите на rm command man page (man rm под самой Unix) можно заметить, что –r означает «удалить содержимое каталогов рекурсивно». Таким образом, выполнение только rm -r . приведет к удалению всего в текущем каталоге, и все это подведет.

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

На otherhand, в rm -ri . в -i, заменяющий -f означает «приглашение перед любым удалением». Это означает, что вы получите возможность сказать «oups! Это не то, что я хочу», прежде чем rm успешно удалит все ваши файлы.

В мои ранние дни sysadmin я сделал rm -rf / в системе, но с полными привилегиями (root). Результатом было два дня - восстановление системы из резервных копий. Вот почему теперь я использую rm -ri.

2

Этот простейший безопасный & общее решение, вероятно:

find -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf 
38

То, что я всегда делаю, это тип

rm -rf * 

и затем ударил Esc- * и Баш расширит * к явный список файлов и каталогов в текущем рабочем каталоге.

Преимущества:

  • можно просмотреть список файлов для удаления перед нажатием ENTER.
  • История команд не будет содержать «rm -rf *» с неповрежденным подстановочным знаком, который затем может быть случайно использован в неправильном месте в неподходящее время. Вместо этого в истории команд будут указаны фактические имена файлов.
  • Было также полезно один или два раза ответить «подождать секунду ... какие файлы я просто удаляю?». Имена файлов видны в буфере прокрутки терминала или в истории команд.

На самом деле, я это так нравится, что я сделал это поведение по умолчанию для TAB этой строки в .bashrc:

bind TAB:insert-completions 
+17

+1 только для расширения ESC- *, которое было ново для меня. –

+0

Отсутствует '--' в этом ответе? Я должен сказать, что этот подход потрясающий. –

4

Как насчет:

rm -rf "$(pwd -P)"/* 
+0

что-то просто хвастается :-) но все равно круто –

+25

jQuery настолько силен. – Pawel

1

I считают, что этот ответ лучше:

https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory

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

в основном вы поднимаетесь на один уровень, а затем говорите, что удаляете все внутри каталога X. Таким образом, вы по-прежнему указываете, какая папка должна удалить свой контент, что безопаснее, чем просто «удалить все здесь», сохраняя исходную папку (которая иногда вам нужна, потому что вам запрещено или просто не нужно для изменения существующих разрешений папки)

Смежные вопросы