rmdir
Удалить пустые директории
← Урок 02: Первые команды — урок где команда введена
Описание
rmdir (от remove directory) — утилита GNU coreutils для удаления
пустых директорий. В отличие от rm -r, rmdir
откажется удалять директорию, если в ней есть хоть один файл или поддиректория — это делает
её безопасным инструментом для работы с временными и рабочими папками.
Ключевое свойство: rmdir — это защита от случайного удаления.
Если вы ошиблись и передали непустую директорию — команда просто завершится с ошибкой,
не тронув содержимое.
Для удаления непустых директорий используется
rm -r — но только осознанно,
так как эта операция необратима.
Синтаксис
Компоненты команды:
- rmdir — сама команда.
- [ОПЦИИ] — флаги для изменения поведения.
- ДИРЕКТОРИЯ... — одна или несколько директорий для удаления (через пробел). Каждая должна быть пустой.
Флаги и опции
| Флаг | Описание |
|---|---|
-p |
Удалить директорию и все пустые родительские директории в указанном пути. Например, rmdir -p a/b/c удалит c, затем b, затем a — при условии что каждая пуста |
--ignore-fail-on-non-empty |
Не выводить ошибку, если директория непуста — просто пропустить её. Полезно в скриптах, когда нужно убрать уже пустые директории без завершения по ошибке |
-v |
Verbose — выводить имя каждой обрабатываемой директории |
--help |
Показать справку и выйти |
--version |
Показать версию утилиты и выйти |
Паттерны использования
Удалить пустую папку
Базовое применение — убрать временную пустую директорию.
mkdir /tmp/test_dir rmdir /tmp/test_dir # Директория удалена # Если не пуста — получим ошибку: mkdir /tmp/test2 touch /tmp/test2/file.txt rmdir /tmp/test2 # rmdir: failed to remove '/tmp/test2': Directory not empty
Удалить цепочку пустых папок
Флаг -p убирает всю вложенную структуру пустых директорий за один вызов.
# Создаём цепочку mkdir -p a/b/c # Удаляем всю цепочку сразу rmdir -p a/b/c # Удалит: a/b/c, потом a/b, потом a # (только если каждая директория пуста)
rmdir против rm -r — когда что использовать
rmdir безопаснее: удаляет ТОЛЬКО пустые директории. Выбирайте по ситуации.
# rmdir — безопасно, только пустые: rmdir /tmp/empty_dir # rm -r — удаляет всё содержимое рекурсивно. # Используйте ТОЛЬКО осознанно — операция необратима! rm -r /tmp/non_empty_dir # rm -rf — без подтверждений, крайняя мера: # rm -rf /tmp/non_empty_dir
В скриптах с флагом --ignore-fail-on-non-empty
Попытка очистить временные директории без прерывания скрипта на ошибке.
#!/bin/bash # Убираем временные директории после работы # (если не опустели — не беда, просто пропустим) rmdir --ignore-fail-on-non-empty \ /tmp/workdir_1 \ /tmp/workdir_2 \ /tmp/workdir_3 echo "Очистка завершена"
Советы и предупреждения
Если в директории есть хоть один файл или поддиректория —
rmdir выдаст ошибку
"Directory not empty" и ничего не удалит. Это защита, а не ограничение.
Для удаления директорий с содержимым используйте
rm -r — но делайте это осознанно,
так как удалённые файлы восстановить стандартными средствами нельзя.
Команда
rm -d (или rm --dir) — аналог rmdir: тоже удаляет
только пустые директории, но является частью команды rm. На практике предпочтение
зависит от контекста: rmdir -p удобнее для цепочек,
rm -d — когда уже используете rm для файлов рядом.