如何将所有子目录中的所有文件gzip压缩为bash中的一个压缩文件


201

可能的重复:
压缩一组目录并创建tar压缩文件

这篇文章介绍了如何在目录结构中分别gzip每个文件。但是,我需要做些不同的事情。我需要为某个目录下的所有文件生成一个大的gzip文件。我还需要能够指定压缩文件的输出文件名(例如,files.gz)并覆盖旧的压缩文件(如果已经存在)。


gzip就其本质而言,仅压缩单个文件。要将多个文件放入一个文件中以进行后续gzip压缩,请使用tar
托马斯

Answers:


387
tar -zcvf compressFileName.tar.gz folderToCompress

folderToCompress中的所有内容都将进入compressFileName

编辑:经过审查和评论,我意识到人们可能会对compressFileName感到困惑,而没有扩展名。如果需要,可以将.tar.gz扩展名(如建议的那样)与compressFileName一起使用


2
谢谢。这是否会压缩“ folderToCompress”下的所有内容(即,递归地)?
道格

2
folderToCompress中的所有内容都将进入compressFileName
amitchhajer 2012年

80
您可能想要选择compressFileName使其包含.tar.gz扩展名,否则会让其他所有人发疯。
drewish

9
这也适用于任意数量的目录,例如tar -zcvf two-dirs.tar.gz dir-one dir-two将创建一个包含两个目录的存档。
佐尔坦

5
也可*用于压缩当前目录中的所有内容,即:tar -zcvf all.tar.gz *

61

有许多压缩方法可以递归地在命令行中运行,并且很好地了解最终用户是谁。

也就是说,如果要将其发送给运行Windows的人,则最好使用zip:

zip -r file.zip folder_to_zip

unzip filenname.zip

对于其他Linux用户或您自己的tar很棒

tar -cvzf filename.tar.gz folder

tar -cvjf filename.tar.bz2 folder  # even more compression

#change the -c to -x to above to extract

必须注意tar以及事物如何被解焦/提取(例如,如果我跑步)

cd ~
tar -cvzf passwd.tar.gz /etc/passwd
tar: Removing leading `/' from member names
/etc/passwd


pwd

/ home / myusername

tar -xvzf passwd.tar.gz

这将创建/ home / myusername / etc / passwd

不确定所有版本的tar是否都这样做:

 Removing leading `/' from member names

18

@amitchhajer的帖子适用于GNU tar。如果有人找到此帖子并需要它在NON GNU系统上工作,则可以执行以下操作:

tar cvf - folderToCompress | gzip > compressFileName

要扩展档案:

zcat compressFileName | tar xvf -

2
除了可移植性之外,如果您要将参数传递给gzip(例如--test或--best),此解决方案也很有用,因为afaik甚至GNU tar都不提供向gzip发送参数的方法。
蒂莫西·伍兹

这是多功能的,因为您也可以使用其他压缩机。例如pigz,它更快,因为它可以更好地利用cpu(zip的多线程实现)。
Ortwin Angermeier 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.