Я знаю, что это удалит все в подкаталоге и под ним:
rm -rf <subdir-name>
Но как удалить все в текущем каталоге, а также все подкаталоги под ним и содержимое всех этих подкаталогов?
Я знаю, что это удалит все в подкаталоге и под ним:
rm -rf <subdir-name>
Но как удалить все в текущем каталоге, а также все подкаталоги под ним и содержимое всех этих подкаталогов?
Практикуйте безопасные вычисления. Просто поднимитесь на один уровень выше в иерархии и не используйте подстановочное выражение:
cd ..; rm -rf -- <dir-to-remove>
Два дефиса --
сообщают rm
, что <dir-to-remove>
не является параметром командной строки, даже если он начинается с дефиса.
rm
не интерпретирует имя каталога как опцию: cd ..; rm -rf -- <dir-to-remove>
- person Flimm; 09.12.2011
rm ./
, вы можете случайно ввести rm . /
, что может привести к катастрофе.
- person irfandar; 12.10.2012
Удаляет все файлы/каталоги ниже текущего.
find -mindepth 1 -delete
Если вы хотите сделать то же самое с другим каталогом, чье имя у вас есть, вы можете просто назвать его
find <name-of-directory> -mindepth 1 -delete
Если вы хотите удалить не только его подкаталоги и файлы, но и сам каталог, опустите -mindepth 1
. Сделайте это без -delete
, чтобы получить список вещей, которые будут удалены.
-mindepth 1
, если вы указываете каталог (find <name-of-directory> -mindepth 1 -delete
). В противном случае Йоханнес прав, он не удалит текущий рабочий каталог (при использовании find -delete
).
- person Weboide; 19.07.2013
find -mindepth 1 -delete
, но получил illegal option -- m
, но он отлично работал, когда я удалил опцию mindepth find . -delete
- person sharon; 06.05.2016
Что я всегда делаю, так это печатаю
rm -rf *
и затем нажмите ESC-*, и bash расширит * до явного списка файлов и каталогов в текущем рабочем каталоге.
Преимущества:
На самом деле, мне это так нравится, что я сделал это поведение по умолчанию для TAB с этой строкой в .bashrc:
bind TAB:insert-completions
--
в этом ответе? Этот подход в целом потрясающий, я должен сказать.
- person Ben Voigt; 14.03.2014
Использовать
rm -rf *
Обновление: .
обозначает текущий каталог, но мы не можем его использовать. Похоже, команда имеет явные проверки для .
и ..
. Вместо этого используйте подстановочные знаки. Но это может быть рискованно.
Более безопасная версия IMO заключается в использовании:
rm -ri *
(это запрашивает подтверждение перед удалением каждого файла/каталога.)
.' or
..'
- person Yen; 04.05.2009
--
в этом ответе?
- person Ben Voigt; 14.03.2014
Это правильно, что rm –rf .
удалит все в текущем, включая любые подкаталоги и их содержимое. Одна точка (.
) означает текущий каталог. будьте осторожны, чтобы не сделать rm -rf ..
, так как двойная точка (..
) означает предыдущий каталог.
При этом, если вы похожи на меня и у вас одновременно открыто несколько окон терминала, вам лучше быть в безопасности и использовать rm -ir .
. Давайте посмотрим на аргументы команды, чтобы понять, почему.
Во-первых, если вы посмотрите на rm
справочную страницу команды (man rm
в большинстве Unix), вы заметите, что –r
означает «рекурсивно удалить содержимое каталогов». Таким образом, выполнение только rm -r .
удалит все в текущем каталоге и все, что находится под ним.
В rm –rf .
добавленный -f означает «игнорировать несуществующие файлы, никогда не запрашивать». Эта команда удаляет все файлы и каталоги в текущем каталоге и никогда не предлагает вам подтвердить, что вы действительно хотите это сделать. -f
особенно опасен, если вы запускаете команду под привилегированным пользователем, поскольку вы можете удалить содержимое любого каталога, не получив шанса убедиться, что это действительно то, что вам нужно.
С другой стороны, в rm -ri .
-i
, который заменяет -f
, означает "запрашивать перед удалением". Это означает, что у вас будет возможность сказать «упс! Это не то, чего я хочу», прежде чем rm счастливо удалит все ваши файлы.
Когда я был системным администратором, я делал 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/*
. При этом используется оператор оболочки оболочки*
для запускаrm -r
для каждого файла или каталога в изображениях.
в основном вы поднимаетесь на один уровень вверх, а затем говорите, что удалите все внутри X-каталога. Таким образом, вы по-прежнему указываете, содержимое какой папки должно быть удалено, что безопаснее, чем просто сказать «удалить все здесь», сохраняя при этом исходную папку (что иногда требуется, потому что вам не разрешено или вы просто не хотите для изменения существующих разрешений папки)