Вопрос

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

rm -rf <subdir-name>

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

Это было полезно?

Решение

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

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 *" с сохраненным шаблоном, который затем может быть случайно повторно использован не в том месте и не в то время.Вместо этого в истории команд будут указаны фактические имена файлов.
  • Также стало удобно раз или два ответить: "подождите секунду...какие файлы я только что удалил?".Имена файлов видны в буфере обратной прокрутки терминала или в истории команд.

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

bind TAB:insert-completions

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

rm -rf *

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

Более безопасная версия IMO заключается в использовании:

rm -ri * 

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

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

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

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

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

С другой стороны, в -i rm -rf /, который заменяет rm -ri означает " перед любым удалением " ;. Это означает, что у вас будет возможность сказать & "Ups!" это не то, что я хочу & до того, как rm с радостью удалит все ваши файлы.

В первые дни моего системного администрирования я выполнял <=> в системе, когда входил в систему с полными привилегиями (root). В итоге прошло два дня восстановления системы из резервных копий. Вот почему я сейчас использую <=>.

Как насчет:

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

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

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

rm -rf *

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

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

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

https://unix.stackexchange.com / вопросы / 12593 / как удаляемая-все-в-файлы-в-каталог

  

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top