scp:如何只复制文件的最后 10%?

n.s*_*.st 7 linux rsync scp

我在 vServer 上有一个相对较大的日志文件 (46M),我只对最近的部分感兴趣。

如何只下载文件的最后 10%?

服务器正在运行 Debian,我在本地使用 Ubuntu。

Fli*_*imm 21

首先以字节为单位获取远程文件的大小:

$ ssh user@host 'stat -c%s FILENAME'    
50000
Run Code Online (Sandbox Code Playgroud)

计算该数字的 10%,并复制最后的 10%:

$ ssh user@host 'tail -c 5000 FILENAME' > DESTINATION
Run Code Online (Sandbox Code Playgroud)

  • 我想人们甚至可以结合这些命令来降低可读性并保存一个 SSH 连接:`ssh user@host 'f=FILENAME; tail -c $(($(stat -c%s $f)/10)) $f' > DESTINATION` (2认同)
  • @n.st:它们最终都使用相同的 `stat()` 系统调用,这很快,尽管 `du` 在实际文件之前也使用 `stat()` 检查所有已安装的文件系统。但这在实践中没有区别。⫽ 但是,如果您只需要获取字节(如上一条评论中的单行),那么运行 `stat` 会更容易,因为它不会输出不必要的文件名,从而使单行比它更短本来可以用`du -b | sed ...`。 (2认同)