在bash脚本中,我想将名为test
的文件重定向到gzip -f
,然后将STDOUT重定向到tar -xfzv
,将STDERR重定向到echo
这就是我的意思尝试:
$ gzip -f <> ./test | tar -xfzv
在这里,tar只是抱怨没有给出文件。我怎么做我尝试的?
编辑:测试文件不是.tar.gz文件,抱歉 编辑:我应该解压缩,然后拉链,而不是像我在这里写的那样
答案 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
开关和工作流程并不熟悉。