通过管道输入当前正在下载的文件的 stdin

通过管道输入当前正在下载的文件的 stdin

我一直在从 Google 云端硬盘下载 zip 文件。这些文件包含 mp4 视频,我不想等待下载完成。 VLC 可以很好地播放不完整的文件,但下载的文件是 zip 文件,而不是 mp4 文件。wget可能是直接将下载传输到过滤器的最简单方法,然后我可以使用funzip并输出到文件,然后像流式传输视频一样播放它。但是我无法wget从 Google Drive 下载,它只是不断返回ERROR 400错误请求错误,同样的情况也发生在curl,所以我不得不与 Chromium 解决。这样我就必须从不完整的文件中传输而不是下载。

有没有简单的方法可以使用当前正在下载的文件进行管道传输funzip

答案1

tail -n +0 -f /path/to/file | funzip ...

基本上,tail 监视文件长度的变化并保持流式传输任何附加字节。但是,它无法知道下载何时完成,因此可能需要在某个时候终止它,具体取决于您对流所做的操作。

当然,我们假设浏览器将尝试线性下载文件,并且不会写入任何元数据来指示文件仅部分下载(稍后将用实际文件字节覆盖)。实际上,浏览器中的下载器非常保守,因此可以预期这是可行的。

相关内容