我希望下载的文件~/downloads
保持相同的文件名。然后我希望将该文件(内容)提取到目录~/downloads/ok
。~/downloads/ok
目录存在。
curl -Lo ~/downloads https://github.com/janeczku/haproxy-acme-validation-plugin/archive/0.1.1.tar.gz | tar zxf -C ~/downloads/ok
我收到错误:tar (child): -C: Cannot open: No such file or directory
答案1
如果您将文件保存到 curl 中的某个位置,则管道到tar
是没有意义的:管道上没有传输数据。并且f
选项 intar
用于从文件中读取(文件名必须是下一个参数),因此在管道中也没有用。要保存到文件并发送到管道,请使用tee
:
curl -L https://github.com/janeczku/haproxy-acme-validation-plugin/archive/0.1.1.tar.gz |
tee ~/downloads/0.1.1.tar.gz |
tar zx -C ~/downloads/ok
答案2
你可能想要
(cd ~/downloads && curl -L https://github.com/janeczku/haproxy-acme-validation-plugin/archive/0.1.1.tar.gz && cd ok && tar zxf ../0.1.1.tar.gz)
或更易读
(
f='https://github.com/janeczku/haproxy-acme-validation-plugin/archive/0.1.1.tar.gz'
cd ~/downloads &&
curl -L $f &&
cd ok &&
tar zxf ../${f##*/}
)
我使用括号在子 shell 中运行命令,因此当前 shell 中的当前目录不会改变
答案3
您需要将文件本身重定向到目标目录:
curl -LOk https://github.com/janeczku/haproxy-acme-validation-plugin/archive/0.1.1.tar.gz > ~/downloads/0.1.1.tar.gz
并继续进行档案提取。
答案4
curl -SL https://download.example.org/abc.tar.gz | tar -zxC /opt
将产生/opt/abc
文件夹。
提取-x
、-z
目标目录.gz
和-C
目标目录,