如何使用一个命令下载并提取 tar,同时仅将单个文件提取到特定位置?

如何使用一个命令下载并提取 tar,同时仅将单个文件提取到特定位置?

我正在尝试完成标题中所说的内容...但我无论如何都无法弄清楚魔法咒语。

clang+llvm-10.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/clang-format我正在下载的 LLVM 档案包含我想要提取到指定位置的路径。

我正在尝试这个:

mkdir outdir && curl -L 'https://github.com/llvm/llvm-project/releases/download/llvmorg-10.0.0/clang+llvm-10.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz' | tar -xz clang+llvm-10.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/clang-format --directory outdir/ --strip-components=2

但这不会放置任何内容outdir,同时会在当前工作目录中创建要提取的路径(这正是我试图避免的--strip-components)。

当我移动--strip-components到前面时,它会剥离路径,但将结果放在当前目录中,而忽略--directory

正确的方法是什么?


最终目标:提取clang-format二进制文件至/usr/local/bin/.

答案1

看来--strip-components-C选项需要放在要提取的文件之前,否则它们会被默默忽略。

我想手册页暗示了这一点

tar -x [-f ARCHIVE] [OPTIONS] [MEMBER...]

但在某些情况下(https://askubuntu.com/a/45354/596667)最后看起来还好。

正确的命令行是

mkdir outdir && curl -L 'https://github.com/llvm/llvm-project/releases/download/llvmorg-10.0.0/clang+llvm-10.0.0-x86_64-linux-gnu-ubuntu-18.04.tar.xz' | tar  --directory outdir/ --strip-components=2 -xz clang+llvm-10.0.0-x86_64-linux-gnu-ubuntu-18.04/bin/clang-format

相关内容