Я знаю, что это удалит все в подкаталоге и под ним:
rm -rf <subdir-name>
Но как вы удаляете все в текущем каталоге, а также под каждым поддиректорией под ним и содержимым всех этих подкаталогов?
Я знаю, что это удалит все в подкаталоге и под ним:
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 расширит * до явного списка файлов и каталогов в текущем рабочем каталоге.
Преимущества:
На самом деле мне это так нравится, что я сделал это по умолчанию для TAB с этой строкой в .bashrc:
bind TAB:insert-completions
Использование
rm -rf *
Обновление: .
обозначает текущий каталог, но мы не можем его использовать. Кажется, что команда имеет явные проверки для .
и ..
. Вместо этого используйте подстановочный знак. Но это может быть рискованным.
Более безопасная версия IMO должна использовать:
rm -ri *
(это приведет к подтверждению перед удалением каждого файла/каталога.)
rm -rf *
Не делай этого, это опасно. УБЕДИТЕСЬ, ЧТО ВЫ В ПРАВОЙ СПРАВОЧНИКЕ.
Правильно, что 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
.
сделать уверенным, что вы находитесь в правильном каталоге
rm -rf *
Как насчет:
rm -rf "$(pwd -P)"/*
Это простейшее безопасное и общее решение, вероятно:
find -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf
Я считаю, что этот ответ лучше:
https://unix.stackexchange.com/info/12593/how-to-remove-all-the-files-in-a-directory
Если ваш каталог верхнего уровня называется
images
, запуститеrm -r images/*
. Это использует оператор оболочки glob*
для запускаrm -r
для каждого файла или каталога в изображениях.
в основном вы поднимаетесь на один уровень, а затем говорите, что удаляете все внутри каталога X. Таким образом, вы по-прежнему указываете, какая папка должна удалить свой контент, что безопаснее, чем просто "удалить все здесь", сохраняя исходную папку (которая иногда вам нужна, потому что вам запрещено или просто не нужно для изменения существующих прав доступа к папке)