Bash 将文件重定向到命令,其标准输出被重定向到另一个命令

Bash 将文件重定向到命令,其标准输出被重定向到另一个命令,bash,zsh,Bash,Zsh,在bash脚本中,我想将名为test的文件重定向到gzip-f,然后将STDOUT重定向到tar-xfzv,并可能将STDERR重定向到echo,这就是我尝试的: $ gzip -f <> ./test | tar -xfzv $gzip-f./test | tar-xfzv 在这里,tar只是抱怨没有提供任何文件。我将如何做我正在尝试的事情 编辑:测试文件不是.tar.gz文件,对此表示抱歉 编辑:我应该先解压,然后再压缩,不像我在这里写的那样tar的-f开关告诉它将获得一个可

在bash脚本中,我想将名为
test
的文件重定向到
gzip-f
,然后将STDOUT重定向到
tar-xfzv
,并可能将STDERR重定向到
echo
,这就是我尝试的:

$ gzip -f <> ./test | tar -xfzv
$gzip-f./test | tar-xfzv
在这里,tar只是抱怨没有提供任何文件。我将如何做我正在尝试的事情

编辑:测试文件不是.tar.gz文件,对此表示抱歉
编辑:我应该先解压,然后再压缩,不像我在这里写的那样

tar
-f
开关告诉它将获得一个可读取的文件名。使用
-
作为文件名,使
tar
从标准输出读取,或省略
-f
开关。有关更多信息,请阅读
man tar

老实说,我不太确定你总的来说想要实现什么。这里的读写重定向和
-f
gzip
切换的目的尚不清楚。如果任务是解压缩
.tar.gz
,最好使用
tar xvzf./test.tar.gz

作为旁注,您不能“将stderr重定向到echo”,echo只是一个内置的,如果我们讨论的是交互式终端会话,stderr最终将在您的终端上可见。您可以将其重定向到带有
2>$filename
construct的文件

编辑:因此,对于问题的澄清版本,如果要解压缩gzip文件,请通过
bcrypt
运行它,然后将其压缩回来,您可以使用

gzip-dc$orig_file.tar.gz | bcrypt[您在这里的交换机]| gzip-c>$modified_file.tar.gz

其中,
gzip
's
-d
表示解压缩,
-c
表示“输出到标准输出”

如果您想单独加密每个文件,而不是加密整个tar归档文件,事情会变得更有趣,因为
tar
不会从stdin读取输入。因此,您需要将文件解压缩到某个位置,对其进行加密,然后将其返回tgz。这不是实现这一目标的最短方法,但一般来说,它的工作原理如下:

mkdir tmp ; cd tmp
tar xzf ../$orig_file.tar.gz
bcrypt [your-switches-here] *
tar czf ../$modified_file.tar.gz * 

请注意,我对
bcrypt
开关和工作流一点也不熟悉。

如果测试不是
.tar.gz
,那就没有意义了:你想解压一些没有被涂上焦油的东西。我知道这里写的方式没有意义。我之所以问这个问题,是因为我计划向服务器发出一个拉式请求,以获取一个gzip文件,我想解压它,用bcrypt加密,然后再从中生成一个tarball。好吧,进一步澄清一下:你想获取一个
.gz
文件,解压它,加密它,然后再压缩回来?在您上次的评论中,直到最后一步,您才谈到tarball,并且实际上没有必要使用单个文件制作tarball。它是多个文件的目录。编辑了答案,请检查它是否现在回答了您的问题。