BASH и find , не удалять последние x папок

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
alex117
ст. сержант
Сообщения: 370
Зарегистрирован: 2010-07-30 13:25:13

BASH и find , не удалять последние x папок

Непрочитанное сообщение alex117 » 2020-05-13 8:31:10

Прошу помощи в корректировке скрипта бекапа на bash
В данный момент есть следующее:

Код: Выделить всё

#!/bin/sh

# vars
    src_dir="/mnt/srv-fs01/"
    dst_dir="/data/backup/srv-fs01/full"
    name=`date +%d%m%y`
    
# delete old backups
    if [ -d $dst_dir ]
	then
	    cd $dst_dir/ 
	    find -type f -mtime +3 -exec rm -rf {} \;
	    find -type d -empty -exec rm -rf {} \;
    fi
#backup
    if [ -d $src_dir/files ];
	then
	# archiving folders
	    mkdir $dst_dir/$name
	    cd $dst_dir/$name
	    tar czvf files.tar.gz $src_dir/files
	   .................
	    tar czvf data.tar.gz $src_dir/data
	else
	    echo -e "\e[1;31msrv-fs01 server unavailable!\e[0m"
	    echo ""
    fi
Интересует именно условие удаления старых бекапов. В данный момент удаляются все, старше 3-х дней.
Но мне нужно добавить условие, чтобы не удалялись два последние архива, даже если они старше 3-х дней.
На случай, если файловый сервер-источник станет не доступен по любой причине, а т.к скрипт выполняется ежедневно, то через пару-тройку дней от бекапов не останется и следа.
Также у меня почему то не удаляются папки командой:

Код: Выделить всё

  find -type d -mtime +3 -exec rm -rf {} \;
удаляются только файлы в ней, а сам каталог остается, поэтому нагородил из двух последовательных команд.
Может есть более грамотное решение?
Заранее благодарю

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

snorlov
подполковник
Сообщения: 3815
Зарегистрирован: 2008-09-04 11:51:25
Откуда: Санкт-Петербург

BASH и find , не удалять последние x папок

Непрочитанное сообщение snorlov » 2020-05-13 13:18:19

Вы сначала проверяйте доступность сервака, затем делайте архив и только после этого удаляйте...

Аватара пользователя
alex117
ст. сержант
Сообщения: 370
Зарегистрирован: 2010-07-30 13:25:13

BASH и find , не удалять последние x папок

Непрочитанное сообщение alex117 » 2020-05-13 13:28:36

snorlov писал(а):
2020-05-13 13:18:19
Вы сначала проверяйте доступность сервака, затем делайте архив и только после этого удаляйте...
да... до этого я как то и не додумался, спасибо

snorlov
подполковник
Сообщения: 3815
Зарегистрирован: 2008-09-04 11:51:25
Откуда: Санкт-Петербург

BASH и find , не удалять последние x папок

Непрочитанное сообщение snorlov » 2020-05-13 19:28:13

В принципе можно сделать список с сортировкой по дате, самые ранние сверху, ну а потом бегать по списку, первые 3- и к примеру пропускать а остальные удалять... Но в любом случае сначала надо проверить доступность сервака...
и еще, я обычно дату сразу в имя архива засовываю, а не в имя каталога, просто смотришь и сразу все видишь

Аватара пользователя
alex117
ст. сержант
Сообщения: 370
Зарегистрирован: 2010-07-30 13:25:13

BASH и find , не удалять последние x папок

Непрочитанное сообщение alex117 » 2020-05-13 20:51:29

snorlov писал(а):
2020-05-13 19:28:13
я обычно дату сразу в имя архива засовываю, а не в имя каталога, просто смотришь и сразу все видишь
У меня много архивов, удобнее их в папке с датой держать

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35262
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

BASH и find , не удалять последние x папок

Непрочитанное сообщение Alex Keda » 2020-05-17 10:29:46

ls, sort...

а вообще, это вот - смело

Код: Выделить всё

cd $dst_dir/ 
	    find -type f -mtime +3 -exec rm -rf {} \;
я обычно делаю

Код: Выделить всё

cd $dst_dir/ && find -type f -mtime +3 -exec rm -rf {} \;
ибо очкую...
Убей их всех! Бог потом рассортирует...

snorlov
подполковник
Сообщения: 3815
Зарегистрирован: 2008-09-04 11:51:25
Откуда: Санкт-Петербург

BASH и find , не удалять последние x папок

Непрочитанное сообщение snorlov » 2020-05-17 10:57:48

А я с давних пор просто составляю список с сортировкой по дате, ну а дальше в цикл по этому списку с переменной. которая увеличивается, если она меньше n, то фигвам, а если больше и равно до удаление... Но в любом случае проверяется доступность и размер места хранения...

Аватара пользователя
alex117
ст. сержант
Сообщения: 370
Зарегистрирован: 2010-07-30 13:25:13

BASH и find , не удалять последние x папок

Непрочитанное сообщение alex117 » 2020-05-17 16:13:27

Alex Keda писал(а):
2020-05-17 10:29:46
а вообще, это вот - смело
Ну это один из нескольких серверов бекапа, так что даже если что-то пойдет не по плану, не так критично.
Хотя для файлов в find можно и расширение вроде как написать, типа *tar.gz
snorlov писал(а):
2020-05-17 10:57:48
и размер места хранения...
а пример условия можно?

snorlov
подполковник
Сообщения: 3815
Зарегистрирован: 2008-09-04 11:51:25
Откуда: Санкт-Петербург

BASH и find , не удалять последние x папок

Непрочитанное сообщение snorlov » 2020-05-17 19:06:36

монтируем, потом

Код: Выделить всё

freesize=`df -hm | grep <монтируемый ресурс>| awk {print $4}`
ну а размер файла сам найдешь...

Аватара пользователя
alex117
ст. сержант
Сообщения: 370
Зарегистрирован: 2010-07-30 13:25:13

BASH и find , не удалять последние x папок

Непрочитанное сообщение alex117 » 2020-05-28 21:17:58

А как Вы проверяете архивы? Я вот просто смотрю на их размер, хотя понимаю, что это не совсем верное решение. Думаю более правильно выделить место, куда распаковывать все архивы, может даже в автоматическом режиме и проверять.

snorlov
подполковник
Сообщения: 3815
Зарегистрирован: 2008-09-04 11:51:25
Откуда: Санкт-Петербург

BASH и find , не удалять последние x папок

Непрочитанное сообщение snorlov » 2020-05-28 21:39:50

Ну распаковывать их можно в null и анализировать код возврата tar'a, если не 0 послать сообщение, ну и я иногда что-то распаковываю ручками...

Аватара пользователя
alex117
ст. сержант
Сообщения: 370
Зарегистрирован: 2010-07-30 13:25:13

BASH и find , не удалять последние x папок

Непрочитанное сообщение alex117 » 2020-05-29 8:05:50

snorlov писал(а):
2020-05-28 21:39:50
код возврата tar'a, если не 0
Я где-то читал, что в разных реализациях тара, разные коды возврата при удачном завершении