Как заставить tar сохранить архив на удаленной машине с помощью sftp или ftp?

Как заставить tar сохранить архив на удаленной машине с помощью sftp или ftp?

Я хотел бы сделать резервную копию некоторых моих очень важных данных на удаленной машине.
В настоящее время я просто сохраняю их на своей локальной машине с помощью этой команды:tar -cvjf ~/backups/Backup.tar.bz2 ~/importantfiles/*

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

Это сделано для того, чтобы впоследствии быть в скрипте, который должен работать сам по себе, а это значит, что любой тип обязательного пользовательского ввода полностью его испортит!

Что-то вроде

tar -cvjf sftp://user:pwassword@host/Backup.tar.bz2 ~/importantfiles/*
tar -cvjf  ftp://user:pwassword@host/Backup.tar.bz2 ~/importantfiles/*

было бы идеально! (Никаких труб (и т.п.), только одна команда!)

решение1

Для SSH:

tar czf - . | ssh remote "( cd /somewhere ; cat > file.tar.gz )"

Для SFTP-сервера:

outfile=/tmp/test.tar.gz
tar cvf $outfile . && echo "put $outfile" | sftp remote:/tmp/
Connecting to remote...
Changing to: /tmp/
sftp> put /tmp/test.tar.gz
Uploading /tmp/test.tar.gz to /tmp/test.tar.gz
/tmp/test.tar.gz

Еще один SFTP:

outfile=/tmp/test.tar.gz
sftp -b /dev/stdin remote >/dev/null 2>&1 << EOF
cd /tmp
get $outfile
bye
EOF
echo $?
0

решение2

Tar не понимает ftp или sftp. Это не его работа. Вы не можете сделать это с помощью одного tar. Использование соответствующих инструментов для каждой задачи и их объединение с оболочкой — это обычный способ работы в системах unix.

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

Если вы не хотите создавать архив локально, потому что у вас недостаточно места, вы можете создать именованный канал, заставить tar писать в этот канал и найти (s)ftp-клиента, который может читать из каналов. К сожалению, sftp отказывается от putканала. Некоторые FTP-клиенты работают, например lftp:

mkfifo f
tar -cvjf f ~/importantfiles/* &
sleep 2
lftp -f - <<EOF
open user@host
put f Backup.tar.bz2
EOF
wait
rm f

Введите свой пароль FTP в~/.netrc.

В качестве альтернативы, есть способ сделать так, чтобы ваша команда tar сохранялась на удаленном сервере напрямую, но вам потребуется некоторая предварительная настройка. Смонтируйте удаленный сервер черезСШФСилиcurlftpfs.

mkdir -p ~/net/host
sshfs host: ~/net/host
tar -cvjf ~/net/host/Backup.tar.bz2 ~/importantfiles/*
fusermount -u ~/net/host

решение3

Решение в одну строку:

tar Jcpvf - / | ftp -u ftp://user:[email protected]/full.backup.tar.xz -

он создает поток stdoutи передает его на FTP-сервер без создания файла. ftpЭто обычный FTP-клиент на любых системах *nix/BSD.

Связанный контент