
我想在遠端電腦上備份一些非常重要的資料。
目前我只是使用以下命令將其保存到本地計算機: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 無法做到這一點。為每項工作使用適當的工具並將它們與 shell 結合起來是在 UNIX 系統上執行操作的正常方式。
最明顯的解決方案是在本地創建存檔,然後將其複製到遠端電腦。
如果因為沒有足夠的空間而不想在本地建立存檔,則可以建立命名管道,將 tar 寫入此管道,然後找到一個可以從管道讀取資料的 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 命令直接保存到遠端伺服器,但您需要事先進行一些設定。將遠端伺服器掛載到SSHFS或者捲曲檔案系統。
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
是任何 *nix/BSD 系統上常用的 ftp 用戶端。