我可以将多个文件输出到STDOUT并单独处理它们吗?

时间:2012-09-26 04:02:24

标签: bash shell stdout stdin

我正在使用ImageMagick的convert程序将pdf文件拆分为单个图像。它允许您通过指定' - '作为输出文件将输出写入STDOUT。

我想处理所有这些图像,然后重新合并它们。不幸的是,当我将输出管道传输到新进程时,它不会将流识别为单个图像文件。将所有图像写入磁盘然后用不同的程序读取它们显然是浪费时间,所以有一种方法可以将多个文件写入STDOUT管道,这样每个文件都是STDIN的另一个图像 - 编辑实例? 这些图像编辑实例的输出是否可以合并到最终合并过程的输入中?

2 个答案:

答案 0 :(得分:2)

您无法以工具通常识别的任何标准化方式将多个文件发送到stdout。 stdout和stdin是流,因此没有办法判断任何给定的部分是来自一个文件还是另一个文件。

有些工具在stdout和stdin上划分记录的标准方法,比如换行符或空字符,但这对任意数据都不起作用,就像大多数图像格式可能包含的那样。

您有几个选择:

  1. 只需使用多个文件。它可能不会像你想象的那么慢;如果文件不是太大,一切都可能在高速缓存中发生,并且实际上从未真正击中过磁盘。
  2. 使用支持多个框架或图层的格式。只要将要编辑的工具理解这种格式,你应该没问题。实质上,此格式成为不同文件之间的分隔符。一种相对标准且支持多个页面/图层的格式是TIFF:

    convert my.pdf tiff:- | convert - -flip - | convert - my.flipped.pdf
    
  3. 如果您使用ImageMagick编辑文件,请不要将其拆分,编辑每个页面并重新组合,只需一次完成即可。例如:

    convert my.pdf -flip my.flipped.pdf
    

    将翻转PDF中的页面,一次性为您提供新的PDF格式。

答案 1 :(得分:0)

tar文件写入STDOUT会是一个合适的解决方案吗?