Bash
如何將 split 的輸出轉發到 sftp?
我的伺服器磁碟空間不足。我想將一些 TB 大小的目錄移動到長期存檔中。這是一個首選文件大小為 16GB 的磁帶機械手。因此,我想將 tar 存檔分成 16GB 的部分。
tar -czpv mydir | split -d - a 4 -b $SplitBlockSize - mydir.gz.tar
對 LT 存檔伺服器的訪問是通過
sftp
. 是否可以轉發 to 的輸出split
而不sftp
將其儲存在本地?
當然,您可以使用
sshfs
. 假設您已經sftp
正確配置了要發送這些文件的方向,您可以使用以下命令將本地目錄映射到遠端伺服器。$ mkdir remote $ sshfs user@server:/path/to/dir remote
然後您可以調整命令以將拆分文件寫入映射目錄。
$ tar -czpv mydir | split -d -a 4 -b $SplitBlockSize - remote/mydir.gz.tar
在您的情況下,我認為更好的解決方案是使用
--filter
帶有split
. 從man
頁面split
---filter=COMMAND write to shell COMMAND; file name is $FILE
這樣做
$ tar -czpv mydir | split -d -a 4 -b $SplitBlockSize --filter 'ssh user@remote "cat >$FILE"' - mydir.gz.tar
將文件直接寫入
ssh
您的遠端伺服器。如果您尚未設置公鑰身份驗證,我建議您設置,否則您必須為傳輸的每個文件輸入密碼。在您的情況下,這將是每 TB 64 次。如果您預計此傳輸需要很長時間,請考慮使用nohup
以減少必須重新開始的機會。