如何将 split 的输出转发到 sftp?

如何将 split 的输出转发到 sftp?

我的服务器磁盘空间不足。我想将一些 TB 大小的目录移动到长期存档中。这是一个磁带机器人,首选文件大小为 16GB。因此我想将 tar 存档分割成 16GB 的部分。

tar -czpv mydir | split -d - a 4 -b $SplitBlockSize - mydir.gz.tar

可通过 访问 LT 存档服务器sftp。是否可以将 的输出转发splitsftp而不将其存储在本地?

答案1

当然,你可以使用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来减少必须重新开始的机会。

相关内容