Как удалить каталог и все его содержимое?

142

В Bash я знаю только то, что

rmdir directoryname

удалит каталог, но только если он пуст. Есть ли способ принудительно удалить подкаталоги?

piperchester
источник

Ответы:

217

Следующая команда сделает это за вас. Будьте осторожны, хотя.

rm -rf directoryname
Филипп Нордволл
источник
52
«-f» - это «--force», который отменяет некоторые проверки работоспособности и подсказки. Более безопасная команда для начала была бы rm -r directoryname.
Джим Пэрис
По какой-то причине я получаю сообщение rm: invalid option -- rоб ошибке при попытке удалить каталог с помощью rm -r <directoryname>.
Sunspawn
@ Sunspawn Проверьте этот связанный вопрос, чтобы увидеть, если это так.
23 марта 2007 г.,
1
@JimParis Я думаю, что слово «безопаснее» относительное. Предположим, вы пишете скрипт для запуска на удаленном компьютере. Этот скрипт имеет команду, которая должна удалить каталог. Здесь было бы «безопаснее» использовать rm -rf directorynamecoz, так как вы не хотите, чтобы ваш скрипт приостанавливал выполнение, потому что он ожидает ввода данных пользователем. Конечно, вы должны быть уверены, что удаление каталога не принесет вреда.
Джон Ред
7

если rm -rf directorynameне получится, попробуйте использовать rm -R -f directoryname, или rm --recursive -f directoryname.

Если вам не повезло с этим, вам следует рассмотреть возможность переустановки rm или переключения оболочек.

saterHater
источник
Это были опции, доступные на моей man-странице rm, я посмотрел их, набрав, man rmчтобы просмотреть мои варианты рекурсивного удаления и параметры форсирования .
saterHater
Есть ли в вашей rmстранице руководства список -r? Что оно делает? (Попробуйте его в каталоге, который вы создаете только для целей тестирования, в котором есть только фиктивные файлы (и, возможно, подкаталоги).) Какую операционную систему вы используете?
G-Man
PS Если rm -rне работает, это будет проблема ОС, а не проблема оболочки. (Строго говоря, это может быть проблемой с версией rm, которую вы используете, поэтому вы можете решить ее, установив другую версию rmили выполнив поиск в вашей системе, чтобы узнать, есть ли у вас другая версия rmв каком-либо каталоге, отличном от /bin.)
G-Man
Ах, верно. Я забыл упомянуть, что я нахожусь на Ubuntu 14.04. Когда я запустил man rmсвой терминал, он дал мне текстовый файл с программой lessпросмотра текста. Я прокрутил и нашел запись с отступом, целое с опциями -R и --recursive , связанными с опцией -r , что означает, что все эти аргументы идентичны.
saterHater
1
редактировать: вы пробовалиsudo rm -r directoryName ? Нераписанные правила основных команд таковы, что -rони позволят программе рекурсивно запускаться на каждом файле вашей файловой системы (начиная с того места, где вы выберете!), И что -f будет принудительно выполнять действия, даже если это опасно . «cd», «mv», «ls» в основном придерживаются этого принципа. ls -r /будет дюзи, и cp -rf / /dev/nullуничтожит все в вашей файловой системе. <- Никогда не запускайте эту команду!
saterHater