【发布时间】:2018-07-18 06:56:33
【问题描述】:
我正在使用 curl 下载一个大 tarball。我只对该压缩包中的一个文件感兴趣。所以目前我正在将 curl 的输出传递给 tar。
$ curl -S http://url/of/big/tarball.tar.gz | tar -xv path/of/one/file
虽然这样可以正常工作。即使所需的文件已经解压,它仍然会完全下载巨大的 tarball。有没有办法在 tar 完成提取所需文件后自动中断它?
编辑:对于任何在网上寻找相同问题的人。我最终创建了一个小型 bash 脚本
trap 'kill $(jobs -p)' EXIT
curl -S "${URL}" | tar -C "${OUTPUT_DIR}" -xv "${FILES[@]}" 2>&1 | head -"${FILES_CNT}" > "${CTRL_FILE}" 2>&1 &
# Wait for the required files to be found in the tar
until [[ -s "${CTRL_FILE}" && $(wc -l "${CTRL_FILE}" | cut -d' ' -f 8) -ge "${FILES_CNT}" ]]; do
sleep 10s
done
【问题讨论】:
-
试试
tar -zxv --occurrence=1 path/of/one/file < <(curl -S http://url/of/big/tarball.tar.gz) -
我当前的 Mac 不支持 occurrence=1 :(
-
请发布您的脚本作为答案。
-
请注意,理论上,同一个文件可以在一个 tar 文件中出现多次。这并不常见,但有一些选项可以做到这一点。你必须决定你想做什么。忽略这种可能性可能是一个有效的决定。