我正在使用curl下载一个很大的tarball。我只对该tarball中的一个文件感兴趣。所以目前我正在将curl的输出传递给tar。
$ curl -S http://url/of/big/tarball.tar.gz | tar -xv path/of/one/file
虽然这种方式很好。即使所需的文件已经没有去皮,它仍然会完全下载大量的tarball。有没有办法在tar完成提取所需文件后自动中断它?
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
答案 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