好吧,这可能听起来很奇怪,但请耐心听我说。我想用来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