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

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

rm -rf <subdir-name>

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

Ответ 1

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

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

Две черточки -- сообщают rm, что <dir-to-remove> не является параметром командной строки, даже когда он начинается с тире.

Ответ 2

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

find -mindepth 1 -delete

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

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

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

Ответ 3

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

rm -rf *

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

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

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

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

bind TAB:insert-completions

Ответ 4

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

rm -rf *

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

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

rm -ri * 

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

Ответ 5

rm -rf *

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

Ответ 6

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

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

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

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

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

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

Ответ 7

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

rm -rf *

Ответ 8

Как насчет:

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

Ответ 9

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

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

Ответ 10

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

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

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

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