Гид по технологиям

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

• 4 min read • Linux • Обновлено 25 Nov 2025
Удаление нескольких подкаталогов одной командой
Удаление нескольких подкаталогов одной командой

Удаление нескольких подкаталогов одной командой в 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

В результате все три указанные папки удаляются одной командой.

Удаление подкаталогов по отдельности в обычном сценарии

Удалённые три подкаталога за один вызов rm

Почему нужен флаг -r

Флаг -r (рекурсивно) говорит rm удалять каталоги и всё их содержимое. Без него rm пытается удалить только файлы и вернёт ошибку для папок:

rm ~/Documents/htg/{done,ideas,notes}

Эта команда без -r приведёт к ошибке “is a directory” или подобной.

Ошибка при попытке удалить каталог без флага -r

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

rmdir ~/Documents/htg/{done,ideas,notes}

rmdir удалит только пустые папки. Если какая-то из них не пуста, rmdir для неё вернёт ошибку, но остальные пустые — удалит.

Использование rmdir для удаления пустых подкаталогов

Важно

  • rm удаляет файлы без перемещения в корзину. Ошибки приводят к потере данных. Делайте резервные копии перед массовыми удалениями.
  • Не запускайте rm -rf с незнакомыми путями и особенно под root-пользователем.

Как безопасно проверить, что будет удалено

  1. Смоделируйте расширение оболочки с помощью echo:
echo rm -r ~/Documents/htg/{done,ideas,notes}

Это выведет развёрнутую команду.

  1. Можно также посмотреть, какие каталоги существуют:
ls -d ~/Documents/htg/{done,ideas,notes}

Если один из путей не существует, оболочка (в зависимости от настроек) вернёт текст с незамеченным элементом или подставит слово с фигурными скобками — проверьте вывод.

  1. Для интерактивного удаления добавьте -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) до реального удаления.

План отката / что делать при ошибке

  1. Немедленно остановите дальнейшие операции на том же разделе.
  2. Если у вас есть резервная копия — восстановите из неё.
  3. Проверьте, не был ли включён инструмент корзины/восстановления на уровне рабочего стола; rm обычно минует корзину.
  4. При отсутствии бэкапа можно попробовать специализированные средства восстановления файловой системы, но это сложный и не всегда успешный путь — обратитесь к специалистам.

Краткий список перед удалением (чеклист)

  • Сделана свежая резервная копия важных данных.
  • Выполнена проверка echo/ls развёрнутых путей.
  • Удаление не выполняется под root без необходимости.
  • Использован флаг -i или тестовый прогон при сомнениях.

1‑линейный глоссарий

  • Brace expansion — механизм оболочки, разворачивающий выражения {a,b,c} в несколько токенов.
  • rm -r — рекурсивное удаление каталогов и их содержимого.
  • rmdir — удаляет только пустые каталоги.

Заключение

Brace expansion — простой и надёжный способ удалить несколько подкаталогов в одной директории одной командой. Всегда проверяйте развёрнутые пути и делайте резервные копии перед массовыми удалениями. Если нужно гибкое условие выбора или автоматическая генерация списка, рассмотрите find или xargs.

Важно: после выполнения rm восстановление без бэкапа затруднено. Будьте внимательны.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро