Задача: Найти в каталоге /backup пустые каталоги, т.е. каталоги в которых нет файлов бекапов.

Предыстория, есть сервер (VPS система на AdminVPS) , на котором развернут конструктор продукции, и вот периодически делаются бекапы: Пн-Cб – бекап базы и конфигурационных файлов, а в Вс – полный бекап включая изображения.

50 23 * * 1-6 sudo /etc/scripts/mbackup >/dev/null 2>&1
50 23 * * 0 sudo /etc/scripts/cbackup  >/dev/null 2>&1

Но место же не резиновое, поэтому мною есть еще задание, которое раз 14 дней чистит каталог /backup от устаревающих файлов, но вот оно (задание) отработало, файлы удалены, но каталоги остались.

50 23 */15 * 0  sudo find /backup/ -type d -mtime +14 -exec rm -f {} ; >/dev/null 2>&1

Почему 14 дней, а потому что по размерам бекапов я прикинул, что за 14 дней место на VPS системе не иссякнет и будет терпимо, да и посоветовавшись с Web-разработчиком такие долгие бекапы будет в самый раз для разбора ситуаций и статистики.

На VPS системе используется ось Ubuntu 18.04.4 LTS, хотя все ниже будет справедливо и для любой Ubuntu системе которую я применяю на обслуживаемых серверах под рабочие проекты.

Вариант №1: Установить утилиту tree и посмотреть вывод:

ekzorchik@customizer:~$ sudo apt-get install tree
ekzorchik@customizer:~$ sudo tree -L 2  /backup
├── 19-07-2023
├── 20-07-2023
├── 21-07-2023
├── 22-07-2023
├── 23-07-2023
├── 24-07-2023
├── 25-07-2023
├── 26-07-2023
├── 27-07-2023
├── 28-07-2023
├── 29-07-2023
├── 30-07-2023
│   ├── 1cconnector.ekzorchik.ru.conf
│   ├── Alldb-development300723_23_50_01.sql.gz
│   ├── Alldb-dump_1cconnector_300723_23_50_01.sql.gz
│   ├── Alldb-dump_ekzorchik_service_300723_23_50_01.sql.gz
│   ├── Alldb-production300723_23_50_01.sql.gz
│   ├── ekzorchik-service.ekzorchik.ru.conf

но как видно есть лишняя информация где есть содержимое, значит нужно как-то по-другому подойти к решению данной задачи.

Вариант №2: Если задействовать утилиту find (прочитав man find вышел на ключ "-empty"):

ekzorchik@customizer:~$ sudo find /backup -type d -empty -exec ls -ld {} \;
drwxr-xr-x 2 root root 4096 Aug 14 07:36 /backup/05-07-2023
drwxr-xr-x 2 root root 4096 Aug 14 07:36 /backup/24-07-2023
drwxr-xr-x 2 root root 4096 Aug 14 07:36 /backup/22-07-2023
drwxr-xr-x 2 root root 4096 Aug 14 07:36 /backup/27-07-2023
drwxr-xr-x 2 root root 4096 Aug 14 07:36 /backup/20-07-2023
drwxr-xr-x 2 root root 4096 Aug 14 07:36 /backup/26-07-2023
drwxr-xr-x 2 root root 4096 Aug 14 07:36 /backup/23-07-2023
drwxr-xr-x 2 root root 4096 Aug 14 07:36 /backup/19-07-2023
drwxr-xr-x 2 root root 4096 Aug 14 07:36 /backup/21-07-2023
drwxr-xr-x 2 root root 4096 Aug 14 07:36 /backup/25-07-2023
drwxr-xr-x 2 root root 4096 Aug 14 07:36 /backup/28-07-2023
drwxr-xr-x 2 root root 4096 Aug 14 07:36 /backup/29-07-2023
ekzorchik@customizer:~$

вот так лучше

Вариант №3: А теперь для удаления найденных пустых каталогов в каталоге /backup:

ekzorchik@customizer:~$ sudo find /backup -type d -empty -exec rm -rf {} \;
find: ‘/backup/05-07-2023’: No such file or directory
find: ‘/backup/24-07-2023’: No such file or directory
find: ‘/backup/22-07-2023’: No such file or directory
find: ‘/backup/27-07-2023’: No such file or directory
find: ‘/backup/20-07-2023’: No such file or directory
find: ‘/backup/26-07-2023’: No such file or directory
find: ‘/backup/23-07-2023’: No such file or directory
find: ‘/backup/19-07-2023’: No such file or directory
find: ‘/backup/21-07-2023’: No such file or directory
find: ‘/backup/25-07-2023’: No such file or directory
find: ‘/backup/28-07-2023’: No such file or directory
find: ‘/backup/29-07-2023’: No such file or directory
ekzorchik@customizer:~$ sudo find /backup -type d -empty -exec ls -ld {} \;
ekzorchik@customizer:~$ ls /backup
01-08-2023  03-08-2023  05-08-2023  07-08-2023  09-08-2023  11-08-2023  13-08-2023  15-08-2023  31-07-2023
02-08-2023  04-08-2023  06-08-2023  08-08-2023  10-08-2023  12-08-2023  14-08-2023  30-07-2023
ekzorchik@customizer:~$

Хоть и был вывод, что "No such file or directory", когда все же успешно отработала и удалила пустые каталоги.

Вариант №4: Посчитать размер каждого каталога, который не пуст:

ekzorchik@customizer:~$ sudo find /backup -type d  -exec du -sh {} \;
40G     /backup
14G     /backup/06-08-2023
460M    /backup/07-08-2023
499M    /backup/09-08-2023
14G     /backup/13-08-2023
457M    /backup/31-07-2023
501M    /backup/12-08-2023
500M    /backup/10-08-2023
502M    /backup/15-08-2023
502M    /backup/14-08-2023
460M    /backup/05-08-2023
6.4G    /backup/30-07-2023
497M    /backup/08-08-2023
458M    /backup/02-08-2023
459M    /backup/03-08-2023
460M    /backup/04-08-2023
457M    /backup/01-08-2023
501M    /backup/11-08-2023
ekzorchik@customizer:~$

Итого делаю вывод, что задача по удалению пустых каталог в папке /backup успешно решена.

На этом пока прощаюсь, с уважением автор блога Олло Александр aka ekzorchik.