Задача: Найти в каталоге /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.