kos*_*tmo 4 pipe bash-scripting
有没有一种简单的方法来截断管道中的文件?具体来说,我想在将文件送入另一个进程之前切掉文件的最后四个字节。
理想情况下,我可以这样写:
cat input.txt | some-process | truncate --size=-4 | another-process > output.txt
但似乎该truncate
命令仅在磁盘上的文件上“就地”操作。
这就像我告诉你,我要说的倒数第四个词一说完就举手。我不会事先告诉你我要说多少话。
管道是一个流。它的数据没有大小,它只有从中获取下一个元素和/或向其中插入元素的操作,结果要么是一条数据,要么是没有更多数据的信号。
因此,除非您首先从流中检索所有数据,将其放入缓冲区,计算其长度,“倒带”流,然后检索少四个元素,否则无法完成。
编辑:我需要做更多的思考而不是想出聪明的类比:) 流不会说“在最后一个元素之前立即停止我”,而是“传输除最后 n 个元素之外的所有元素”,并通过维护一个只有 n 个元素的缓冲区,并且在传输第一个元素之前等待前 n 个元素被接收,这是可能的。显然,这在像电信这样的情况下是行不通的,在这种情况下,您希望在收到数据后立即发送数据,就像您想要前 n 个元素一样。我认为truncate
不会这样做。
(试图downvoting self -1)
归档时间: |
|
查看次数: |
2943 次 |
最近记录: |