PQ
PQ.Hosting

Валюта

Как удалить все файлы в папке Linux: rm, find и rsync

Автор
PQ
02 марта 2026
4 мин чтения
6 просмотров

Удаление всех файлов в директории — частая задача при обслуживании серверов: очистка логов, кэша, временных файлов, содержимого бакапов. Способов несколько, и выбор зависит от того, нужно ли удалить скрытые файлы, сохранить вложенные папки или удалить всё рекурсивно.

rm: базовое удаление

Удалить все обычные файлы в текущей директории:

rm /path/to/folder/*

Символ * — glob-маска, которую оболочка раскрывает в список всех файлов директории. Папки и скрытые файлы при этом не затрагиваются.

Важно: rm удаляет файлы мгновенно и без корзины. Отменить операцию невозможно. Всегда проверять путь перед выполнением.

Удалить файлы с подтверждением каждого

rm -i /path/to/folder/*

Флаг -i (interactive) запрашивает подтверждение перед удалением каждого файла. Замедляет процесс, но страхует от случайного удаления не того.

Удалить включая скрытые файлы

Файлы, начинающиеся с точки (.bashrc, .env, .htaccess), не попадают под маску *. Для их удаления использовать .[!.]*:

rm /path/to/folder/* /path/to/folder/.[!.]*

Маска .[!.]* захватывает файлы начиная с . но исключает . и .. (текущую и родительскую директорию). Это важно — удаление . или .. приведёт к катастрофе.

В bash можно включить dotglob — тогда * будет включать скрытые файлы:

shopt -s dotglob
rm /path/to/folder/*
shopt -u dotglob  # выключить обратно

Удалить всё рекурсивно (файлы и вложенные папки)

rm -rf /path/to/folder/*

-r — рекурсивно (включая вложенные директории), -f — без запросов подтверждения (force). Вместе — самая мощная и самая опасная комбинация.

⚠️ Никогда не выполнять rm -rf / или rm -rf /* — это уничтожит всю файловую систему. Дважды проверять путь перед выполнением.

find: точечное удаление с фильтрами

find даёт полный контроль над тем, что именно удалять — по типу, расширению, возрасту, размеру.

Удалить только файлы (не директории) в папке:

find /path/to/folder -maxdepth 1 -type f -delete

-maxdepth 1 — только текущий уровень, не рекурсивно. -type f — только обычные файлы. -delete — удалить найденное.

Удалить файлы рекурсивно во всех вложенных папках:

find /path/to/folder -type f -delete

Удалить файлы по расширению:

find /path/to/folder -name "*.log" -delete
find /path/to/folder -name "*.tmp" -delete

Удалить файлы старше N дней:

find /path/to/folder -type f -mtime +30 -delete

-mtime +30 — файлы, изменённые более 30 дней назад. Полезно для ротации логов.

Удалить файлы больше определённого размера:

find /path/to/folder -type f -size +100M -delete

Предварительно посмотреть, что будет удалено — запустить без -delete, с -print:

find /path/to/folder -type f -mtime +30 -print

Очистить папку, сохранив саму папку и вложенные директории

Иногда нужно удалить все файлы, но оставить структуру папок нетронутой — например, очистить кэш, сохранив директории-плейсхолдеры.

find /path/to/folder -type f -delete

Без -maxdepth 1 команда пройдёт по всем вложенным папкам и удалит все файлы, оставив пустые директории.

rsync: нестандартный, но надёжный способ

Синхронизировать папку с пустой директорией — фактически очищает её:

mkdir /tmp/empty_dir
rsync -a --delete /tmp/empty_dir/ /path/to/folder/

--delete удаляет из целевой директории всё, чего нет в источнике. Источник пустой — значит, цель тоже станет пустой. Работает быстрее rm -rf на папках с миллионами мелких файлов (характерно для кэша PHP или node_modules).

Удалить содержимое, не удаляя саму папку

Иногда важно, чтобы папка осталась с теми же правами и владельцем — удаление и создание заново могут изменить метаданные.

rm -rf /path/to/folder/* /path/to/folder/.[!.]*

Папка остаётся. Удаляется только её содержимое.

Безопасная проверка перед удалением

Перед деструктивной командой — убедиться в правильности пути:

ls /path/to/folder/

Или с echo — посмотреть, что раскроет glob-маска, не удаляя:

echo rm /path/to/folder/*

echo просто напечатает команду с раскрытыми именами файлов. Это безопасный способ проверить, что именно попадёт под удаление.

Частые ошибки

rm: cannot remove '/path/*': No such file or directory Папка пустая или путь неверный. Глоб * не раскрывается в пустой директории — bash передаёт * буквально, и rm не находит такого файла.

Скрытые файлы остались после rm * Маска * не захватывает файлы с точкой. Дополнительно выполнить rm .[!.]* или использовать find.

rm -rf не удаляет директорию целиком Если в команде rm -rf /path/to/folder/* — удаляется содержимое, но не сама папка. Чтобы удалить и папку: rm -rf /path/to/folder.

Нечаянно удалил не ту папку rm не имеет корзины. Восстановление возможно только через инструменты типа extundelete или testdisk — и только если диск не перезаписан. На продакшн-серверах всегда держать бэкапы.

Шпаргалка

Задача Команда
Удалить все файлы в папке rm /path/to/folder/*
Включая скрытые файлы rm /path/to/folder/* /path/to/folder/.[!.]*
Рекурсивно с подпапками rm -rf /path/to/folder/*
Только файлы через find find /path/to/folder -maxdepth 1 -type f -delete
Рекурсивно только файлы find /path/to/folder -type f -delete
По расширению find /path/to/folder -name "*.log" -delete
Старше 30 дней find /path/to/folder -type f -mtime +30 -delete
Предпросмотр без удаления find /path/to/folder -type f -mtime +30 -print
Быстрая очистка (rsync) rsync -a --delete /tmp/empty/ /path/to/folder/

Поделиться статьей

Похожие статьи