Вопрос или проблема
У меня есть IP-камера, которая записывает видео в структуре папок, похожей на эту:
├── 2023
│ ├── 10
│ ├── 11
│ │ ├── cam_00_20240921153706.mp4
│ │ ├── cam_00_20240921153928.mp4
│ │ ├── cam_00_20240921164743.mp4
│ │ └── cam_00_20240921230558.mp4
│ └── 12
└── 2024
├── 08
└── 09
├── 21
│ ├── cam_00_20240921153706.mp4
│ ├── cam_00_20240921153928.mp4
│ ├── cam_00_20240921164743.mp4
│ ├── cam_00_20240921230558.mp4
│ └── cam_00_20240921230646.mp4
└── 22
├── cam_00_20240922101839.mp4
└── cam_00_20240922102150.mp4
Теперь я хочу удалить все файлы, которые старше 2 дней, и все пустые папки. Для этого я сделал
#удалить файлы старше 2 дней
find /recordings/????/??/?? -depth -type f -mtime +2 -exec rm -f {} \;
#удалить пустые месячные директории
find /recordings/????/?? -depth -empty -type d -mtime +2 -exec rm -rf {} \;
#удалить пустые годовые директории
find /recordings/???? -depth -empty -type d -mtime +2 -exec rm -rf {} \;
Можно ли это сделать в одной строке? Или более элегантным способом?
Ответ или решение
Чтобы удалить все файлы, старше 2 дней, и пустые папки в структуре каталогов, похожей на указанную вами, можно использовать одну команду find
, которая выполнит все необходимые действия в одном вызове. Так как вы хотите удалить как файлы, так и пустые папки, мы можем объединить оба действия в одном запросе.
Вот команда, которая решит вашу проблему:
find /recordings/ -type f -mtime +2 -delete -o -type d -empty -delete
Объяснение команды:
-
find /recordings/
: Это начальная директория, в которой мы будем выполнять поиск. -
-type f -mtime +2 -delete
: Это часть команды, которая находит файлы (-type f
), возраст которых превышает 2 дня (-mtime +2
), и удаляет их (-delete
). -
-o
: Это логический оператор "или", который позволяет комбинировать два условия: удаление старых файлов или удаление пустых директорий. -type d -empty -delete
: Эта часть команды находит пустые директории (-type d
и-empty
) и удаляет их.
Таким образом, одна команда find
будет выполнять оба действия: удалять старые файлы и пустые директории одновременно.
Замечание:
-
Убедитесь, что у вас есть резервная копия данных или вы точно знаете, что делаете, так как использование команды с параметром
-delete
приведёт к необратимому удалению. - Также, для корректной работы убедитесь, что у вашего пользователя есть необходимые права доступа к указанной директории и её содержимому.
Это самый компактный и эффективный способ решения вашей задачи, который не только упрощает скрипт, но и делает его более читабельным.