我想要做的事情看起来很简单,但我无法让它工作,也没有在谷歌上找到任何关于如何做到这一点的信息?
我想先对一堆文件进行 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 还接受单个破折号(“-”)作为要压缩的文件的名称,在这种情况下,它将从标准输入读取文件,从而允许 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
这应该可以,但我没有测试过。解压存档时,您将丢失所有文件名,只剩下一个数据流。
厚颜无耻地从以前的邮政