Смущает эта команда `find` в скрипте Bash?

8

У меня есть сценарий bash, созданный кем-то, кто больше не может объяснить смысл, который используется для автоматического TAR-файла папки и ее резервного копирования. На данный момент я запутался с финальной строкой:

find '/home/_backups/pokebrawl' -mtime +6 -type f -delete

Полный скрипт ниже.

#!/bin/bash
#Purpose = Backup of Important Data
#Created on 17-1-2012
#Author = Hafiz Haider
#Version 1.0
#START
TIME=$(date +"%m-%d-%Y-%T")
FILENAME=pokebrawl-$TIME.tar.gz
SRCDIR=/home/servers/brawl/world
DESDIR=/home/_backups/pokebrawl
tar -cpzf $DESDIR/$FILENAME $SRCDIR
find '/home/_backups/pokebrawl' -mtime +6 -type f -delete
#END
MODS Удалить аккаунт
источник
3
Нет последующих вопросов, один вопрос на вопрос. Вы можете задать столько вопросов, сколько захотите. Поэтому нажмите «Задать вопрос», затем задайте другой вопрос, не добавляйте его в конец другого.
ctrl-alt-delor

Ответы:

11

Команда findудалит любой обычный файл в каталоге или под ним /home/_backups/pokebrawl, возраст которого более семи дней (или, точнее, не изменен в течение последней недели).

Стоит наверное прочитать

find "$DESDIR" -mtime +6 -type f -delete

или

find "${DESDIR:?Not set correctly}" -mtime +6 -type f -delete

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

Я предполагаю, что это способ сохранить резервные копии только на прошлой неделе. Я бы предложил использовать что-то вроде borgbackupили resticвместо этого, так как они могли бы хранить резервные копии намного дольше, не занимая гораздо больше места (даже ежечасное резервное копирование в течение года не заняло бы много места вообще, если данные не сильно изменились) , Они делают дедупликацию данных и borgbackupдополнительно поддерживают сжатие (оба поддерживают удаленное резервное копирование и шифрование тоже).

Чтобы запускать скрипт каждые 24 часа (в полночь), используйте задание cron.

Сначала выполните команду crontab -e. Это откроет редактор с текущим crontab для активного пользователя (это может быть или не быть пустым файлом).

Затем добавьте

@daily /path/to/the/script.sh

(где path/to/the/script.shпуть к скрипту).

Сохраните и выйдите из редактора.

Сценарий теперь будет вызываться в полночь, даже ночью.

Если вы хотите запускать скрипт, скажем, в 13:30 каждый день, добавьте в качестве записи crontab следующее:

30 13 * * * /path/to/the/script.sh

См. Руководство crontab в вашей системе для получения подробной информации о том, как написать расписание crontab ( man 5 crontab).

Кусалананда
источник
1
На нем, вероятно, следует прочесть аспект: я видел, что некоторые сценаристы сознательно избегают использования переменной окружения при выполнении этого типа операции find/ delete, в случае, если некоторые тупицы забывают установить $DESDIRили установить ее на "/", или некоторые по ошибке.
Стив
@steve Ну, если DESDIRизменить и findкоманда не обновится, то не удастся очистить правильный каталог. Возможно, было бы полезно использовать ${DESDIR:?Not set correctly}или что-то подобное вместо этого.
Кусалананда
5
find '/home/_backups/pokebrawl' -mtime +6 -type f -delete

Это находит все файлы в каталоге /home/_backups/pokebrawl, которые не были изменены в последние +6дни, и удаляет их. ПРИМЕЧАНИЕ: +6приравнивается к 7 дням.

Посмотрите, man findкак работают эти переключатели:

$ man find
...
   -mtime n
          File's data was last modified n*24 hours ago.  See the comments 
          for -atime to understand how rounding affects the interpretation 
          of file modification times.

На дистрибутивах Redhat вы можете просто поместить этот скрипт в каталог, /etc/crondailyи он будет запускаться каждый день. Вы можете видеть, что там уже есть другие скрипты, которые вы можете использовать в качестве примеров:

$ sudo ls -l /etc/cron.daily/
total 12
-rwx------. 1 root root 219 Aug  1  2017 logrotate
-rwxr-xr-x. 1 root root 618 Mar 17  2014 man-db.cron
-rwx------. 1 root root 208 Nov  4  2016 mlocate
SLM
источник