如何用单条命令实现指定文件合并后压缩?
如何用单条命令实现指定文件合并后压缩?
这个问题我之前也踩过坑!你用管道的时候报错,是因为zip默认需要你指定要压缩的文件名,而管道传过去的是文件内容(标准输入),它不知道该把这些内容存成什么文件,所以才会提示“Nothing to do!”。这里给你几个实用的解决办法:
方法一:让zip直接读取标准输入并指定文件名(推荐)
如果你的系统用的是GNU版本的zip(大部分Linux发行版都是),可以用这个命令:
cat File2022*.txt | zip All_2022.zip - --name All_2022.txt
- 这里的
-是告诉zip从标准输入(也就是管道传过来的合并内容)读取数据 --name All_2022.txt是指定压缩包内这个文件的名字,这样解压后就会得到你想要的All_2022.txt,而不是默认的-
方法二:通用兼容版(无需依赖特定zip版本)
如果你的zip不支持--name参数,也可以用这条命令,虽然会临时生成中间文件但会自动删除:
cat File2022*.txt > All_2022.txt && zip All_2022.zip All_2022.txt && rm All_2022.txt
这条命令用&&把三个操作连起来,只有前一个成功才会执行下一个,最后自动删掉临时的All_2022.txt,效果和你原来的两步操作一样,但只用一条命令完成。
方法三:用进程替换简化写法
还有一种更简洁的写法,利用shell的进程替换特性,不用显式写cat:
zip All_2022.zip <(cat File2022*.txt) --name All_2022.txt
这里的<(cat File2022*.txt)会把合并后的内容当成一个临时文件传给zip,再配合--name指定文件名,效果和方法一一样。
备注:内容来源于stack exchange,提问作者bk_32
相关产品推荐
相关产品推荐

