#tar #download #lz4 #downloader #gz #thread #extractor

app pipe_downloader

用于*.tar.gz, *tar.lz4 和 *.tar.bz2 文件的快速下载 + 解压程序

16 个版本 (4 个重大更改)

0.8.2 2023年5月8日
0.8.1 2023年5月8日
0.7.1 2023年5月8日
0.6.4 2023年2月25日
0.4.2 2022年11月29日

#444 in HTTP服务器

Download history 9/week @ 2024-03-10 1/week @ 2024-03-17 8/week @ 2024-03-31

每月下载量81次

MIT 许可证

345KB
2.5K SLoC

Rust 1.5K SLoC // 0.0% comments TSX 668 SLoC // 0.0% comments TypeScript 71 SLoC Python 34 SLoC // 0.4% comments JavaScript 19 SLoC // 0.8% comments

pipe_downloader

此程序用于一次性下载、解压和解包文件。因此,它基本上与以下命令执行相同的操作

curl http://arvhive.tar.lz4 | lz4 -dc | tar -xv -C output_dir

结果是使用 (pipe_downloader 将创建目录,如果目录不为空)

pipe_downloader --url http://arvhive.tar.lz4 --output-dir output_dir

但它比上述管道命令使用多核更好。此外,它提供进度信息,可以被服务器用于提供API。实现是非阻塞的,基于线程(未使用异步I/O)

它为每个下载启动3个或更多线程,一个或多个用于下载,一个用于解压,一个用于解包(写入文件)。它使用数据块,当数据块被填充数据时,它们被收集,当下一个数据块满了时,它们由解包器处理。

未使用不安全代码。

目前,它支持

  • archive.tar.lz4
  • archive.tar.gz
  • archive.tar.bz2
  • archive.tar.zst
  • archive.tar.xz
  • single_file.lz4
  • single_file.gz
  • single_file.bz2
  • single_file.zst
  • single_file.xz

作为操作的基本模式,它使用 PARTIAL_CONTENT (206) HTTP状态代码,允许在连接丢失时继续操作(下载器耐心等待数据块再次可用)。当服务器不支持 PARTIAL_CONTENT 时,下载器也支持正常的 GET (200) 下载,但任何网络超时/断开连接将导致不可恢复的错误。

没有选项在不可恢复错误或杀死进程后重新开始下载。

  1. 交叉编译

交叉构建--发布--目标 aarch64-未知-linux-musl

  1. 测试运行

cargo运行 --发布 --示例pipe_downloader ----output-dir linux-6.0.4 --url=https://mirrors.edge.kernel.org/pub/linux/kernel/v6.x/linux-6.0.4.tar.gz

依赖项

~29–45MB
~793K SLoC