我想将一个命令导入到一个较慢的命令中,中间留有一个相当大的缓冲区(约 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