Unix cat 和 zip 一起使用

Unix cat 和 zip 一起使用

我想要做的事情看起来很简单,但我无法让它工作,也没有在谷歌上找到任何关于如何做到这一点的信息?

我想先对一堆文件进行 cat 处理,然后对生成的文件进行 zip 压缩,但只用一个命令,而不是两个。

我有一堆文件,其名称如下:

File202112.txt
File202201.txt
File202202.txt
File202203.txt
...
File202212.txt
File202301.txt

我只想将一年的数据汇总在一起,然后压缩结果。

所以如果我这样做,它就会起作用,但它是两个命令:

cat File2022*.txt > All_2022.txt
zip All_2022.zip All_2022.txt

但是我尝试使用管道将它们组合成一行,但是当我这样做时,它不起作用:

cat File2022*.txt | zip All_2022.zip
zip error: Nothing to do!

我怎样才能让它工作?

答案1

zip(1) - Linux 手册页

zip 还接受单个破折号(“-”)作为要压缩的文件的名称,在这种情况下,它将从标准输入读取文件,从而允许 zip 从另一个程序获取输入。例如:

tar cf - . | zip backup - 

将压缩 tar 命令的输出,以便备份当前目录。这通常比使用 -r 选项的上一个示例产生更好的压缩效果,因为 zip 可以利用文件之间的冗余。可以使用以下命令恢复备份

unzip -p backup | tar xf -

因此,对于你来说,这将是:

cat File2022*.txt | zip All_2022.zip -

答案2

这可能不是您真正想要的,但您可以这样做。

mkfifo zip.pipe                   # create fifo
cat File2022*.txt > zip.pipe &    # pipe data to fifo, in background
zip --fifo All_2022.zip zip.pipe  # note the `--fifo` argument to zip
rm zip.pipe                       # cleanup

应该可以,但我没有测试过。解压存档时,您将丢失所有文件名,只剩下一个数据流。

厚颜无耻地从以前的邮政

相关内容