Страница 1 из 1

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

Добавлено: 2020-05-13 8:31:10
alex117
Прошу помощи в корректировке скрипта бекапа на 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 {} \;
удаляются только файлы в ней, а сам каталог остается, поэтому нагородил из двух последовательных команд.
Может есть более грамотное решение?
Заранее благодарю

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

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

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

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

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

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

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

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

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

Добавлено: 2020-05-17 10:29:46
Alex Keda
ls, sort...

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

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

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

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

cd $dst_dir/ && find -type f -mtime +3 -exec rm -rf {} \;
ибо очкую...

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

Добавлено: 2020-05-17 10:57:48
snorlov
А я с давних пор просто составляю список с сортировкой по дате, ну а дальше в цикл по этому списку с переменной. которая увеличивается, если она меньше n, то фигвам, а если больше и равно до удаление... Но в любом случае проверяется доступность и размер места хранения...

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

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

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

Добавлено: 2020-05-17 19:06:36
snorlov
монтируем, потом

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

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

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

Добавлено: 2020-05-28 21:17:58
alex117
А как Вы проверяете архивы? Я вот просто смотрю на их размер, хотя понимаю, что это не совсем верное решение. Думаю более правильно выделить место, куда распаковывать все архивы, может даже в автоматическом режиме и проверять.

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

Добавлено: 2020-05-28 21:39:50
snorlov
Ну распаковывать их можно в null и анализировать код возврата tar'a, если не 0 послать сообщение, ну и я иногда что-то распаковываю ручками...

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

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