Я знаю, что это удалит все в каталоге и под ним:В Unix, как вы удаляете все в текущем каталоге и под ним?
rm -rf <subdir-name>
Но как вы удалите все, что в текущем каталоге, а также каждый подкаталог под ней и содержимое всех подкаталогов?
Я знаю, что это удалит все в каталоге и под ним:В Unix, как вы удаляете все в текущем каталоге и под ним?
rm -rf <subdir-name>
Но как вы удалите все, что в текущем каталоге, а также каждый подкаталог под ней и содержимое всех подкаталогов?
Практика безопасного вычисления. Просто зайдите на один уровень вверх в иерархии и не использовать подстановочное выражение:
cd ..; rm -rf -- <dir-to-remove>
два дефиса --
сказать rm
, что <dir-to-remove>
не параметр командной строки, даже если он начинается с тиром.
Почему это безопаснее? – Yen
Потому что вы точно соответствуете названному каталогу и, следовательно, с меньшей вероятностью удаляете то, что вы не собираетесь удалять. – tvanfosson
Правда. Я мог видеть, что я делаю это довольно легко. – Yen
Использование
rm -rf *
Обновление: .
стенды для текущего каталога, но мы не можем использовать это. Команда, похоже, имеет явные проверки для .
и ..
. Вместо этого используйте подстановочный знак. Но это может быть рискованным.
Безопаснее версия ИМО является использование:
rm -ri *
(. Это запрос на подтверждение перед удалением каждого файла/каталога)
«Может быть рискованным», - это странно лаконично. – 2009-05-04 16:19:09
Когда я делаю что-то вроде этого, я нашел быстрый ls -r. Сначала вы можете увидеть, что собираетесь удалить. Полезно дать краткое представление о том, что вы не собираетесь для удаления всего диска ... –
Почему он более рискован, чем rm -rf
сделать уверен вы находитесь в правильном каталоге
rm -rf *
Это не удаляет файлы или подкаталоги, имя которых начинается с периода. – 2009-05-04 16:18:29
true. в моем тестировании также нет rm -rf. tvanfosson имеет лучшее решение IMO с его «cd ..; rm -rf
rm -rf *
Не делай этого, это опасно. УБЕДИТЕСЬ, ЧТО ВЫ В ПРАВОЙ СПРАВОЧНИКЕ.
Удалит все файлы/каталоги под текущим.
find -mindepth 1 -delete
Если вы хотите сделать то же самое с другим каталогом, имя которого у вас есть, вы можете просто назвать, что
find <name-of-directory> -mindepth 1 -delete
Если вы хотите удалить не только подкаталоги и файлы этого, но также и сам каталог, опустите -mindepth 1
. Сделайте это без -delete
, чтобы получить список вещей, которые будут удалены.
Мне нужно было удалить все файлы в подкаталогах, но не захотели удалять сами подкаталоги. найти <имя-of-direcotry> -mindepth 2 -delete отлично работает! –
Вам нужно '-mindepth 1', если вы указываете каталог (' find <имя-каталога -mindepth 1 -delete'). В противном случае Johannes прав, он не удалит текущий рабочий каталог (при использовании 'find -delete'). – Weboide
IMO, это лучший ответ, особенно в скриптах. – wizonesolutions
Правильно, что 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
.
Этот простейший безопасный & общее решение, вероятно:
find -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf
То, что я всегда делаю, это тип
rm -rf *
и затем ударил Esc- * и Баш расширит * к явный список файлов и каталогов в текущем рабочем каталоге.
Преимущества:
На самом деле, я это так нравится, что я сделал это поведение по умолчанию для TAB этой строки в .bashrc:
bind TAB:insert-completions
+1 только для расширения ESC- *, которое было ново для меня. –
Отсутствует '--' в этом ответе? Я должен сказать, что этот подход потрясающий. –
Как насчет:
rm -rf "$(pwd -P)"/*
что-то просто хвастается :-) но все равно круто –
jQuery настолько силен. – Pawel
I считают, что этот ответ лучше:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory
Если ваш каталог верхнего уровня называется
images
, запуститеrm -r images/*
. Это использует оператор оболочки glob*
для запускаrm -r
для каждого файла или каталога в изображениях.
в основном вы поднимаетесь на один уровень, а затем говорите, что удаляете все внутри каталога X. Таким образом, вы по-прежнему указываете, какая папка должна удалить свой контент, что безопаснее, чем просто «удалить все здесь», сохраняя исходную папку (которая иногда вам нужна, потому что вам запрещено или просто не нужно для изменения существующих разрешений папки)
Это должно быть обманом: http://stackoverflow.com/questions/550922/how-to-delete-all-files-from-current-directory-including-current-directory – jmucchiello