Articles of gzip

使用pipe道编写gzipped输出文件,无需额外的磁盘空间

我有以下实现的function,用于读取没有磁盘使用gzipped文件。 #include <fstream> #include <stdlib.h> // for mkstemp() and std::system() #include <memory> #include <errno.h> #include <cassert> #include <unistd.h> // for ::close() and unlink() void foo (std::ifstream& in, std::string& fileName) { char tmpName[] = "/tmp/tmp.XXXXXX"; const int fileDescriptor = mkstemp(tmpName); if (fileDescriptor >= 0) { std::string tmpFileName (tmpName); ::close(fileDescriptor); unlink(tmpFileName.c_str()); std::string cmd= "mkfifo " + tmpFileName; […]

将pipe道焦油提取成焦油创build

我现在有一个tar.gz,我想从中提取一个或两个文件,并将它们打包/添加到一个新的tar.gz中。 当然,我可以保存到一个临时文件并使用它,但是ABSOLUTE的要求是不需要任何中间文件输出即pipe道。 换句话说,我想要的是像下面的伪代码(显然语法是不正确的) tar -xvf first.tar.gz subdir1/file1 subdir2/file2 | tar cf – | gzip > second.tar.gz 有谁知道这个适当的语法? 我已经尝试了很多变种,但无济于事。 我也很喜欢使用cpio的想法,但是又一次,我被如何正确地获得语法所困扰,并且从我的理解中,cpio只会使用档案或文件名,而不是文件。 任何帮助将不胜感激。 编辑:在压缩包内没有特定的文件名模式来提取。 鉴于BSD和GNU tar一次只能search一个模式,我不确定是否甚至可以分别使用include / exclude标志。

将tar.gz转换为zip

我在我的Ubuntunetworking服务器上有大量的gzip压缩文件,我需要把它们转换成zip文件。 我认为这将用脚本来完成,但是我应该使用什么语言,以及如何解压缩和重新压缩文件?

我怎样才能有效地将许多文件移动到新的服务器?

我正在切换托pipe提供商,并需要将数百万上传的文件传输到新的服务器。 所有的文件都在同一个目录下。 是。 你阅读正确。 ;) 在过去,我已经这样做了: 从源服务器上压缩所有的文件 将邮政编码到新的服务器 拉开拉链 将目录移动到适当的位置 无论出于何种原因,我从第1步开始的拉链总是带着他们的path,并要求我mv。 我最后一次完成这个工作大约需要4-5天才能完成,大约是现在的60%。 我希望有一个更好的方法。 你有什么build议? 文件结构被哈希。 像这样的东西: AAAAAAAAAA.jpg – ZZZZZZZZZZ.txt 这里有一个想法,我们正在折腾: 根据3个字母的前缀将拉链分成多个微型拉链。 就像是: AAAAAAAAAA.jpg – AAAZZZZZZZ.gif => AAA.zip 理论优点: 可以加快传输,允许多个拉链一次传输 可以限制传输失败所浪费的时间。 (等待2天的转账最终失败是可怕的) 理论缺点: 可能会使初始zip变慢,因为zip必须通过通配符( AAA* )查找文件,或许可以通过使用所有CPU而不是一个CPU来同时运行多个zip线程来抵消。 复杂? 我们也考虑过rsync和scp,但是担心手动传输每个文件的费用。 而由于远程服务器是空的,我不需要担心已经有什么。 你怎么看? 你会怎么做? (是的,我最终会把它们转移到Amazon S3上,我只是把它们放在一个磁盘上,但同时我昨天也需要它们)

如何使用awk来压缩文件

如何为压缩文件更改以下命令? awk 'FNR==NR { array[$1,$2]=$8; next } ($1,$2) in array { print $0 ";" array[$1,$2] }' input1.vcf input2.vcf 该命令正常工作的文件。 我需要更改压缩文件的命令。

用一个命令打开一个.tar.gz文件

当我下载一个.tar.gz文件时,我用两个命令打开它,先用gunzip然后tar 。 是否可以用一个命令打开它?

可以将多个.gz文件合并为一个文件吗?

可以说,我有3个文件: 1.txt , 2.txt和3.txt都是gzipped。 我知道,gzip允许多个文件结合使用猫: cat 1.gz 2.gz 3.gz > 123.gz 但是,当提取123.gz将产生原始的3个文件。 是否有可能将三个档案合并成一个档案内的单个文件将被合并成单个文件的方式?

分别Gzip多个文件并保留原始文件

我正在寻找gzip多个文件(到多个.gz文件)在一个目录中,同时保留原件。 我可以使用这些命令来执行单个文件: find . -type f -name "*cache.html" -exec gzip {} \; 要么 gzip *cache.html 但是既不保留原文。 我试过了 find . -type f -name "*cache.html" -exec gzip -c {} > {}.gz 但只有一个{} .gz文件。 有一个简单的方法来做到这一点?

如何在bash中的所有子目录下gzip所有文件

我想在我当前位置的子目录之间进行迭代,并单独gzip每个文件。 为了压缩目录中的文件,我使用 for file in *; do gzip "$file"; done 但是这只能在当前目录下工作,而不能在当前目录的子目录下工作。 我怎样才能重写上述语句,以便它也拉链所有子目录中的文件?

分割gzip日志文件,而不将未解压缩的分割存储在磁盘上

我有一个反复的任务,将一组大的(每个大约1-2吉比特)gzip的Apache日志文件分成几个部分(比如说500K行)。 最后的文件应该再次压缩以限制磁盘的使用。 在Linux上我通常会这样做: zcat biglogfile.gz | split -l500000 生成的文件将被命名为xaa,xab,xac等。所以我这样做: gzip x* 这种方法的效果是,作为一个中间结果,这些巨大的文件被临时存储在磁盘上。 有没有办法避免这种中间磁盘使用? 我可以(以类似于xargs的方式)通过命令(如gzip)将输出分开pipe道,并重新压缩输出? 还是我看错了方向,有没有更好的方法来做到这一点? 谢谢。