s sh, найди, труба к rsyn c с sudo - PullRequest
0 голосов
/ 26 февраля 2020

Я использовал этот скрипт для резервного копирования:

key=/key.pem
remote=asdf@asdf.com

log_file=/asdf/backup.log

yesterday=$(date -d "yesterday 00:00" '+%Y-%m-%d')

# get latest export archive
rsync -e "ssh -i $key" --log-file=$log_file $remote:/archive/*$yesterday*.tar.gz /asdf/backup/contents

# get latest logs
rsync -e "ssh -i $key" --log-file=$log_file $remote:$(ssh -i $key $remote "ls -t /log/access.$yesterday.log | head -1") /asdf/backup/log
rsync -e "ssh -i $key" --log-file=$log_file $remote:$(ssh -i $key $remote "ls -t /log/main.$yesterday.log | head -1") /asdf/backup/log
rsync -e "ssh -i $key" --log-file=$log_file --rsync-path="sudo rsync" $remote:/log/postgresql-$yesterday*.log /asdf/backup/log

Он загружает архив и три файла журнала.
Для файла журнала postgresql, потому что он создан с минимальными привилегиями (я полагаю), Мне пришлось использовать sudo, чтобы скопировать его.

Теперь мне нужно, чтобы скрипт мог находить файлы, соответствующие некоторым аргументам, и загружать их, а не предоставлять им имена файлов и загружать их по одному.

Вот то, что я придумал:

ssh -i $key $remote 'find /log -maxdepth 1 -newermt "$time_old" ! -newermt "$time_new" -type f \
-regextype posix-extended -regex ".*[0123456789]{4}-[0123456789]{2}-[0103456789]{2}.*\.log" -printf %P\\0' \
| rsync --files-from=- --from0 -e "ssh -i $key" --log-file=$log_file --rsync-path="sudo rsync" $remote:/log/ /asdf/backup/log

Локальное тестирование, детали ssh и find работают, но при передаче на rsync я не получаю ошибок, но также нет загрузок.

...