В Unix, как вы удаляете все в текущем каталоге и ниже него?

Я знаю, что это удалит все в подкаталоге и ниже него:

rm -rf <subdir-name>

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

10 ответов


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

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

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


удалит все файлы / каталоги ниже текущего.

find -mindepth 1 -delete

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

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

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


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

rm -rf *

и затем нажмите ESC -*, и bash расширит * до явного списка файлов и каталогов в текущем рабочем каталоге.

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

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

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

bind TAB:insert-completions

использовать

rm -rf *

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

более безопасная версия IMO должна использовать:

rm -ri * 

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


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

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

во-первых, если вы посмотрите на rm команда man-страницы (man rm в большинстве Unix) вы заметите, что –r означает"рекурсивно удалить содержимое каталогов". Итак, делаем rm -r . в одиночку удалит все в текущем каталоге и все, что ниже.

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

С другой стороны, в rm -ri . the -i заменяет -f означает "запрос на удаление". Это означает, что у вас будет возможность сказать " oups! это не то, чего я хочу", прежде чем rm пойдет счастливо удалите все файлы.

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


Как насчет:

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

rm-rf*

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


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

rm -rf *

самое простое, безопасное и общее решение, вероятно:

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

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

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

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

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