Удалите старые резервные папки через lftp / ftp - PullRequest
0 голосов
/ 25 октября 2011

Я пишу небольшой скрипт резервного копирования для моего сервера Ubuntu.Файлы архивируются и архивируются локально во временную папку, загружаются на ftp-сервер через lftp и, наконец, локально удаляются.

Сохранение файлов на сервере:

FTPSUBDIR=`date --utc +"%Y-%m-%d"`
echo "mkdir -p /daily/${FTPSUBDIR}; mirror --reverse ${TEMPDIR} /daily/${FTPSUBDIR};" | /usr/bin/lftp -u "$FTPUSER,$FTPPASS" "$FTPSERV"

Структура папокна FTP-сервере:

/
  daily
    2011-10-25
    2011-10-24
    2011-10-23
  weekly
    2011-10-23
    2011-10-16
    2011-10-09

Как сохранить только самые последние резервные копии (5 для ежедневных, 4 для еженедельных) и удалить другие папки на FTP-сервере?

Ответы [ 2 ]

2 голосов
/ 25 октября 2011

С помощью только операций ftp в удаленной системе вам нужно быть более активным на стороне клиента ftp.

Далее следуют неотлаженные фрагменты кода ... вам придется детализировать и отлаживать.

# print results of directory list to standard out
ftp_dir ()
{
  typeset dir="$1";
  ftp <<'FTP'
login
connection and
cd
directory commands
FTP
}

# read delete commands (or others) from stdin using inline login
ftp_delete()
{
   cat <<FTP - | ftp
send FTP login and delete commands
FTP
}

do_delete ()
{
   typeset dir="$1";
   typeset cnt="$2";
   if [ ${#names} -gt $cnt ]; then
          typeset a_end=$(( ${#names} - 8 ));
          ( typeset n=0;
            while [ $n -lt a_end ]; do
                echo "delete $dir/${names[$n]}";
                 n=$(( $n + 1 ));
             done; ) | ftp_delete
      fi
}

names=( $( ftp_dir weekly | sort ) );  #get all entries
do_delete dir 4

Если бы я не спал, я мог бы придумать лучший ответ.

1 голос
/ 27 ноября 2015

Это самый простой способ удаления старых резервных копий:

HOST='ftpback.net'
USER='username'
PASSWD='pass'
FILE="file.tar.gz"
DELPREFIX=$( date -d 'now -2 month' +'%y-%m' )

ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
cd mysql
put $FILE
mdel "$DELPREFIX*"
y
quit
END_SCRIPT
exit 0

DELPREFIX в этом случае равняется месяцу до последнего, поэтому, если это ноябрь, датой будет сентябрь, например, '15 -09' .

В случае FTP он удалит все файлы, начинающиеся с DELPREFIX , например, '15 -09' . Это не дает вам возможности ежедневно удалять файлы, но если вы рады, что резервные копии хранятся с переменным количеством, это проще, чем другие решения для сценариев.

Возможно, вам придется немного подправить это для имен файлов.

...