将文件解压缩到命名管道和文件

时间:2015-01-07 10:13:10

标签: bash tee

我正在尝试解压缩文件并将输出重定向到命名管道和另一个文件。因此我使用命令tee

gunzip -c $FILE | tee -a $UNZIPPED_FILE > $PIPE

我的问题是是否有任何其他选项可以实现相同但是使用一个将异步写入文件的命令。我希望输出立即重定向到管道,并且通过将输出发送到某种缓冲区来写入文件将在后台运行。

提前致谢

1 个答案:

答案 0 :(得分:1)

您需要的是命名管道(FIFO)。首先创建一个:

mkfifo fifo

现在我们需要从命名管道读取进程。有一个名为buffer的旧的unix utillity,它早先用于异步写入磁带设备。在后台启动从管道读取的流程:

buffer -i fifo -o async_file -u 100000 -t &

-i是输入文件,-o是输出文件。 -u标志仅供您查看,它确实是异步的。每次写入1/10秒后,这是一个小暂停。完成后-t会给出摘要。

现在开始gunzip进程:

gunzip -c archive.gz | tee -a fifo > $OTHER_PIPE

你看到枪口过程非常快。在文件夹中,您将看到文件async_file生长缓慢,这是写入该文件的后台进程buffer进程。完成后(对于一个巨大的文件可能需要很长时间),您会看到摘要。另一个文件是直接写的。