在管道之间使用磁盘支持的缓冲区

在管道之间使用磁盘支持的缓冲区

我想将一个命令导入到一个较慢的命令中,中间留有一个相当大的缓冲区(约 200GB)。以下是示例用例:

command1 | buffer -f file.buffer | command2

有命令可以做到这一点吗?我看到的命令仅缓冲到内存中。

现在想想,这样能达到我想要的效果吗?

#!/bin/bash
# buffer.sh
FILE="$1"
tail -F "$FILE" 2> /dev/null &
cat > "$FILE"

虽然我不确定在读完所有内容后如何停止尾部......

答案1

我刚刚发现mbuffer

显然,该选项-t使用临时文件作为大缓冲区,这正是我想要的。或者,-T /path/to/file我可以选择哪个已安装的文件系统将保存该文件。

我还注意到该文件在打开后就被删除了,所以ls没有显示出来。但仍然ls -l /proc/<PID of mbuffer>/fd确认它在那里。

所以我的例子就变成:

command1 | mbuffer -T file.buffer -m 200G | command2

相关内容