Bash

如何將 split 的輸出轉發到 sftp?

  • October 8, 2021

我的伺服器磁碟空間不足。我想將一些 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以減少必須重新開始的機會。

引用自:https://unix.stackexchange.com/questions/672408