管道 bash 命令

管道 bash 命令

我正在尝试使用一个(管道)命令下载一个tar.gzwget、解压缩它并重命名解压后的目录。

我的尝试是:

wget -O- $URL | tar fvxz - -C $DEST

wget -O- $URL | tar fvxz - | mv - $DEST

我在什么方面失败了?

答案1

如果您有 BSD 或 GNU tar,您可以执行以下操作:

mkdir -p "$DEST" && wget -O- "$URL" | tar --strip-components 1 -xvzf- -C "$DEST"

因为 GNU tar 有--strip-components,但这不是标准解决方案。无论如何,您无法真正使用单个管道来执行此操作,因为您必须已经拥有目录,并且如果您愿意放弃整个单个管道,那么有很多很好的方法可以做到这一点。

mkdir -p "$DEST" &&
cd "$DEST" &&
wget -O- "$URL" | tar -xvzf-
cd * && # Assumes the result only has one directory
mv * .. # Assumes no dotfiles

如果有必要,您可以通过调整此答案来解决多个目录的点文件和 tar 问题。

相关内容