将文件重定向到命令,其stdout被重定向到另一个命令

时间:2016-06-18 23:05:18

标签: bash zsh

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

$ gzip -f <> ./test | tar -xfzv

在这里,tar只是抱怨没有给出文件。我怎么做我尝试的?

编辑:测试文件不是.tar.gz文件,抱歉 编辑:我应该解压缩,然后拉链,而不是像我在这里写的那样

1 个答案:

答案 0 :(得分:1)

tar的{​​{1}}开关告诉它将给出一个要读取的文件名。使用-f获取文件名,以便从标准输出中读取-,或省略tar开关。请阅读-f以获取更多信息。

说实话,我并不确定你想要实现的目标。读写重定向和man tar -f切换的目的尚不清楚。如果任务是解压gzip,请更好地使用.tar.gz

作为旁注,你不能'将stderr重定向到echo',echo只是一个内置的,如果我们谈论交互式终端会话,stderr最终会在终端上显示出来。您可以使用tar xvzf ./test.tar.gz构造将其重定向到文件。

编辑:所以对于问题的澄清版本,如果你想解压缩一个gzip压缩文件,通过2>$filename运行它,然后压缩它,你可以使用像

这样的东西

bcrypt

其中gzip -dc $orig_file.tar.gz | bcrypt [your-switches-here] | gzip -c > $modified_file.tar.gz的{​​{1}}代表解压缩,而gzip代表'输出到stdout'。

如果你想单独加密每个文件而不是加密整个tar存档,事情会变得更有趣,因为-d不会读取stdin的输入。因此,您需要在某处提取文件,对其进行加密,然后将其恢复。这不是最简单的方法,但总的来说它的工作原理如下:

-c

请注意,我对tar开关和工作流程并不熟悉。