Удаление нескольких подкаталогов одной командой в Linux

Если вы хотите удалить несколько подкаталогов внутри одной директории через командную строку, не обязательно запускать rm по одному разу. Самый простой и компактный вариант — использовать brace expansion оболочки Bash или совместимой.
Пример: удаляем три подкаталога
Предположим, у вас есть директория ~/Documents/htg с пятью подкаталогами, и вы хотите удалить три из них: done, ideas и notes. Вместо трёх отдельных команд можно ввести одну:
rm -r ~/Documents/htg/{done,ideas,notes}Содержимое фигурных скобок называется списком расширения (brace expansion). Каждая запись внутри скобок подставляется в путь по очереди. Команда выше разворачивается в:
- ~/Documents/htg/done
- ~/Documents/htg/ideas
- ~/Documents/htg/notes
В результате все три указанные папки удаляются одной командой.


Почему нужен флаг -r
Флаг -r (рекурсивно) говорит rm удалять каталоги и всё их содержимое. Без него rm пытается удалить только файлы и вернёт ошибку для папок:
rm ~/Documents/htg/{done,ideas,notes}Эта команда без -r приведёт к ошибке “is a directory” или подобной.

Если все указанные подкаталоги пусты и вы хотите удалить только пустые каталоги, используйте rmdir:
rmdir ~/Documents/htg/{done,ideas,notes}rmdir удалит только пустые папки. Если какая-то из них не пуста, rmdir для неё вернёт ошибку, но остальные пустые — удалит.

Важно
- rm удаляет файлы без перемещения в корзину. Ошибки приводят к потере данных. Делайте резервные копии перед массовыми удалениями.
- Не запускайте rm -rf с незнакомыми путями и особенно под root-пользователем.
Как безопасно проверить, что будет удалено
- Смоделируйте расширение оболочки с помощью echo:
echo rm -r ~/Documents/htg/{done,ideas,notes}Это выведет развёрнутую команду.
- Можно также посмотреть, какие каталоги существуют:
ls -d ~/Documents/htg/{done,ideas,notes}Если один из путей не существует, оболочка (в зависимости от настроек) вернёт текст с незамеченным элементом или подставит слово с фигурными скобками — проверьте вывод.
- Для интерактивного удаления добавьте -i:
rm -ri ~/Documents/htg/{done,ideas,notes}Флаг -i спросит подтверждение перед удалением каждого файла или каталога.
Альтернативные способы и случаи использования
- Удаление папок по шаблону (через find):
find ~/Documents/htg -maxdepth 1 -type d \( -name 'done' -o -name 'ideas' -o -name 'notes' \) -exec rm -r {} +Этот подход полезен, если список имён формируется динамически.
- Использование xargs для длинных списков:
printf '%s\n' done ideas notes | xargs -I{} rm -r ~/Documents/htg/{}}- Удаление по маске (внимательно):
rm -r ~/Documents/htg/notes*Это удалит все имена, начинающиеся на notes.
Когда метод с brace expansion не подходит (контрпримеры)
- Если имена папок содержат запятые или фигурные скобки — brace expansion работает по символам-разделителям, и это усложнит синтаксис.
- Если список генерируется программно и содержит много элементов, удобнее использовать find или xargs.
- Если вы хотите удалять только пустые папки — используйте rmdir.
Шаблоны и шпаргалка команд
- Удалить несколько: rm -r path/{a,b,c}
- Удалить интерактивно: rm -ri path/{a,b,c}
- Удалить только пустые: rmdir path/{a,b,c}
- Просмотреть, что будет: echo rm -r path/{a,b,c}
- Удалить по маске: rm -r path/prefix*
Критерии приёмки
- Указанные подкаталоги удалены.
- Никакие другие файлы или папки вне указанных путей не тронуты.
- Был выполнен тест-прогон (echo или ls) до реального удаления.
План отката / что делать при ошибке
- Немедленно остановите дальнейшие операции на том же разделе.
- Если у вас есть резервная копия — восстановите из неё.
- Проверьте, не был ли включён инструмент корзины/восстановления на уровне рабочего стола; rm обычно минует корзину.
- При отсутствии бэкапа можно попробовать специализированные средства восстановления файловой системы, но это сложный и не всегда успешный путь — обратитесь к специалистам.
Краткий список перед удалением (чеклист)
- Сделана свежая резервная копия важных данных.
- Выполнена проверка echo/ls развёрнутых путей.
- Удаление не выполняется под root без необходимости.
- Использован флаг -i или тестовый прогон при сомнениях.
1‑линейный глоссарий
- Brace expansion — механизм оболочки, разворачивающий выражения {a,b,c} в несколько токенов.
- rm -r — рекурсивное удаление каталогов и их содержимого.
- rmdir — удаляет только пустые каталоги.
Заключение
Brace expansion — простой и надёжный способ удалить несколько подкаталогов в одной директории одной командой. Всегда проверяйте развёрнутые пути и делайте резервные копии перед массовыми удалениями. Если нужно гибкое условие выбора или автоматическая генерация списка, рассмотрите find или xargs.
Важно: после выполнения rm восстановление без бэкапа затруднено. Будьте внимательны.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента