将文件重定向到命令,其标准输出被重定向到另一个命令
Redirect file to command, whose stdout is redirected to another command
在 bash 脚本中,我想将名为 test
的文件重定向到 gzip -f
,然后将 STDOUT 重定向到 tar -xfzv
,并可能将 STDERR 重定向到 echo
这是我试过的:
$ gzip -f <> ./test | tar -xfzv
这里tar只是抱怨没有给文件。我将如何做我正在尝试的事情?
编辑:测试文件不是 .tar.gz 文件,抱歉
编辑:我应该解压缩,然后压缩,不像我在这里写的那样
tar
的 -f
开关告诉它它将被赋予一个文件名来读取。使用 -
作为文件名以使 tar
从 stdout 读取,或省略 -f
开关。请阅读 man tar
了解更多信息。
老实说,我不太确定您总体上想要达到的目标。这里读写重定向和-f
gzip
切换的目的不清楚。如果任务是解压 .tar.gz
,最好使用 tar xvzf ./test.tar.gz
.
作为旁注,您不能 'redirect stderr to echo',echo 只是一个内置的,如果我们谈论的是交互式终端会话,stderr 无论如何最终都会在您的终端上可见。您可以使用 2>$filename
构造将其重定向到文件。
编辑:所以对于问题的澄清版本,如果你想解压缩一个 gzip 文件,运行 通过 bcrypt
,然后压缩回来,你可以使用类似
gzip -dc $orig_file.tar.gz | bcrypt [your-switches-here] | gzip -c > $modified_file.tar.gz
其中gzip
的-d
代表解压,-c
代表'output to stdout'.
如果您想单独加密每个文件而不是加密整个 tar 存档,事情会变得更有趣,因为 tar
不会从标准输入读取输入。因此,您需要将文件提取到某处,对其进行加密,然后将它们 tgz 回来。这不是最短的方法,但通常它是这样工作的:
mkdir tmp ; cd tmp
tar xzf ../$orig_file.tar.gz
bcrypt [your-switches-here] *
tar czf ../$modified_file.tar.gz *
请注意,我根本不熟悉 bcrypt
开关和工作流程。
在 bash 脚本中,我想将名为 test
的文件重定向到 gzip -f
,然后将 STDOUT 重定向到 tar -xfzv
,并可能将 STDERR 重定向到 echo
这是我试过的:
$ gzip -f <> ./test | tar -xfzv
这里tar只是抱怨没有给文件。我将如何做我正在尝试的事情?
编辑:测试文件不是 .tar.gz 文件,抱歉 编辑:我应该解压缩,然后压缩,不像我在这里写的那样
tar
的 -f
开关告诉它它将被赋予一个文件名来读取。使用 -
作为文件名以使 tar
从 stdout 读取,或省略 -f
开关。请阅读 man tar
了解更多信息。
老实说,我不太确定您总体上想要达到的目标。这里读写重定向和-f
gzip
切换的目的不清楚。如果任务是解压 .tar.gz
,最好使用 tar xvzf ./test.tar.gz
.
作为旁注,您不能 'redirect stderr to echo',echo 只是一个内置的,如果我们谈论的是交互式终端会话,stderr 无论如何最终都会在您的终端上可见。您可以使用 2>$filename
构造将其重定向到文件。
编辑:所以对于问题的澄清版本,如果你想解压缩一个 gzip 文件,运行 通过 bcrypt
,然后压缩回来,你可以使用类似
gzip -dc $orig_file.tar.gz | bcrypt [your-switches-here] | gzip -c > $modified_file.tar.gz
其中gzip
的-d
代表解压,-c
代表'output to stdout'.
如果您想单独加密每个文件而不是加密整个 tar 存档,事情会变得更有趣,因为 tar
不会从标准输入读取输入。因此,您需要将文件提取到某处,对其进行加密,然后将它们 tgz 回来。这不是最短的方法,但通常它是这样工作的:
mkdir tmp ; cd tmp
tar xzf ../$orig_file.tar.gz
bcrypt [your-switches-here] *
tar czf ../$modified_file.tar.gz *
请注意,我根本不熟悉 bcrypt
开关和工作流程。