gpt4 book ai didi

linux - 如何 gzip 文件同时将压缩内容打印到标准输出

转载 作者:太空宇宙 更新时间:2023-11-04 10:34:37 33 4
gpt4 key购买 nike

我正在尝试压缩目录中的一系列文件,但也将压缩文件的内容打印到标准输出。

鉴于我有:

09:00 /tmp/file1.txt
10:00 /tmp/file2.txt
11:00 /tmp/file3.txt

我基本上希望执行 gzip -c/tmp/file?.txt >/tmp/compressed.gz,但我也希望在保留原始时间戳的情况下压缩文件:

09:00 /tmp/file1.txt.gz
10:00 /tmp/file2.txt.gz
11:00 /tmp/file3.txt.gz
12:00 /tmp/compressed.gz

有没有办法用一条命令做到这一点,而不是:

for i in $(ls /tmp/file?.txt)
do
gzip ${i} && cat ${i}.gz >> /tmp/compressed.gz
done

我想压缩并写入磁盘一次,并且不想再次读取磁盘。

最佳答案

这会在一行中完成您的要求:

ls file*.txt | xargs -n1 -I'{}' bash -c 'cat {} | gzip - | tee {}.gz >> compressed.gz; touch {}.gz -r {}'

每个输入文件只从磁盘读取一次,压缩版本保存两次;一次在其文件 *.txt.gz 条目中,一次在 catch-all compressed.gz 文件中。最后,它在压缩后调整 gzip 文件的时间戳。

请注意,这不会删除原始 txt 文件。压缩后删除每个文件:

ls file*.txt | xargs -n1 -I'{}' bash -c 'cat {} | gzip - | tee {}.gz >> compressed.gz; touch {}.gz -r {}; rm {}'

使用 GNU 版本的 lsxargsbashcat 在 Linux 上测试gzipteetouchrm

关于linux - 如何 gzip 文件同时将压缩内容打印到标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38212295/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com