Разница между rmdir и rm -r

9

Я обычно удаляю каталоги используя rm :

rm -r myDir

Однако я знаю о другой команде, rmdir , которая, похоже, тоже справляется с этой задачей:

rmdir myDir

В чем разница между этими двумя командами и когда их следует использовать?

Джо
источник
2
Работает ли ваш rmdir, если в подкаталоге есть файлы?
Джефф Шаллер
1
Смотрите также одноименный системный вызов, rmdir(2)который может удалить только пустые каталоги.
Дэвид Фёрстер,
4
Кстати, есть «правильная» процедура использования rm -r: (1) введите команду, но не вводите ее (2) уберите руки от клавиатуры (3) сосчитайте до пяти (4) нажмите ENTER. Я начал делать что-то подобное со всеми опасными командами, чтобы дать мне возможность посмотреть на то, что я делаю, убедиться, что я правильно ввел что-то, подумать о возможных непредвиденных последствиях и т. Д. Иногда это приводит меня например, стереть мою команду и сначала выполнить дополнительные проверки.
17
3
@ajb rm -rf ~ /*- очистить мой домашний каталог. Или подождите, может быть, очистите систему. Всегда хорошо перепроверять;).
Том Карпентер
1
@ajb Обратите внимание, что rmdirи rm -rэто две строки одинаковой длины :-)
Кусалананда

Ответы:

14

rm -rудаляет каталог и все его содержимое; rmdirудалит каталог, только если каталог пуст. Мне нравится использовать следующее, чтобы удалить каталог и все его содержимое:

rm -rf <directory_to_be_removed>
Скотт Кайсер
источник
17
Обратите внимание, что вы обычно не должны использовать, -fесли вам не нужно. Его удобно использовать -rfкаждый раз, но он отключает (почти) все проверки безопасности.
Алло
5
-1 за ненужную рекомендацию -fфлага rm, которая может иметь непредсказуемые, необратимые последствия
кошка
Так rmdirэто просто rm -d?
Стэн Струм
@StanStrum -dне является стандартной опцией rm.
Кусалананда
@cat The rmкоманды в целом может иметь эти последствия. -fФлаг полезен при работе в set -eв сценарии. Я бы согласился, что использование без размышлений не является необходимым .
Кусалананда
1

Вы должны использовать это, rm -rкогда хотите рекурсивно удалить каталог и все его содержимое, или когда целью может быть каталог или файл, и вы хотите удалить его независимо от того, что это такое.

Вы должны использовать, rmdirкогда хотите удалить пустой каталог.

Команда rmdirполезна, так как она отказывается удалять непустые каталоги и файлы. Это служит уловкой безопасности в ситуациях, когда вы можете быть абсолютно уверены, что то, что вы удаляете, является каталогом и что каталог пуст, прежде чем удалить его (например, в скрипте), и хотите рассматривать его как условие ошибки в противном случае.

Кусалананда
источник