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

Вопрос или проблема

У меня есть 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

Объяснение команды:

  1. find /recordings/: Это начальная директория, в которой мы будем выполнять поиск.

  2. -type f -mtime +2 -delete: Это часть команды, которая находит файлы (-type f), возраст которых превышает 2 дня (-mtime +2), и удаляет их (-delete).

  3. -o: Это логический оператор "или", который позволяет комбинировать два условия: удаление старых файлов или удаление пустых директорий.

  4. -type d -empty -delete: Эта часть команды находит пустые директории (-type d и -empty) и удаляет их.

Таким образом, одна команда find будет выполнять оба действия: удалять старые файлы и пустые директории одновременно.

Замечание:

  • Убедитесь, что у вас есть резервная копия данных или вы точно знаете, что делаете, так как использование команды с параметром -delete приведёт к необратимому удалению.

  • Также, для корректной работы убедитесь, что у вашего пользователя есть необходимые права доступа к указанной директории и её содержимому.

Это самый компактный и эффективный способ решения вашей задачи, который не только упрощает скрипт, но и делает его более читабельным.

Оцените материал
Добавить комментарий

Капча загружается...