我正在使用 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
最佳答案
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
关于linux - 完成从 tarball 中提取给定文件后,管道 un-tar kill pipe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48673056/