完成从tarball中提取给定文件时管道化的un tar kill管道

时间:2018-02-07 20:54:22

标签: linux bash curl pipe tar

我正在使用curl下载一个很大的tarball。我只对该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

1 个答案:

答案 0 :(得分:0)

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