我可以 cp 到 stdout/pipe 吗?

我可以 cp 到 stdout/pipe 吗?

好吧,这可能听起来很奇怪,但请耐心听我说。我想用来cp复制块设备的内容,并且想通过管道将其传输到gzip动态压缩它。我可以用 来做这个cp吗?我知道我可以使用dd,但我只是想知道是否可以从 开始制作这样的管道cp

答案1

您不能使用cp因为cp在正常情况下不会写入标准输出,但您可以使用cat

cat device-file | gzip -c >some-output-file

在这种情况下,使用它是有意义的,cat因为您可能需要在其前面加上前缀sudo或类似的命令才能从非特权用户的 shell 会话访问设备。如果您处于 root shell 中(无论出于何种原因,而且几乎没有任何原因),

gzip -c <device-file >some-output-file

也会起作用的。

答案2

您可以创建一个命名管道并将您的设备复制到其中:

mkfifo /tmp/mypipe
cp device-file /tmp/mypipe

然后打开另一个 shell,在其中并行启动 gzip 以从管道读取数据并写入输出文件:

gzip </tmp/mypipe >outfile.gz

完成后,您可以删除命名管道

rm /tmp/mypipe

相关内容