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

Linux 如何在bash中将所有子目录中的所有文件压缩为一个压缩文件,linux,bash,shell,gzip,Linux,Bash,Shell,Gzip,可能重复: 描述如何在目录结构中分别对每个文件进行gzip。但是,我需要做一些稍微不同的事情。我需要为某个目录下的所有文件生成一个大的gzip文件。我还需要能够为压缩文件(例如files.gz)指定输出文件名,并覆盖旧的压缩文件(如果已经存在) tar -zcvf compressFileName.tar.gz folderToCompress folderToCompress中的所有内容都将转到compressFileName 编辑:经过审查和评论,我意识到人们可能会对没有扩展名的comp

可能重复:

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

tar -zcvf compressFileName.tar.gz folderToCompress

folderToCompress中的所有内容都将转到compressFileName


编辑:经过审查和评论,我意识到人们可能会对没有扩展名的compressFileName感到困惑。如果需要,您可以将.tar.gz扩展名(如建议的)与compressFileName一起使用。如果有人找到此帖子并需要它在非
GNU
系统上工作,他们可以这样做:

tar cvf - folderToCompress | gzip > compressFileName
要扩展存档,请执行以下操作:

zcat compressFileName | tar xvf -

有很多压缩方法可以在命令行中递归地工作,知道最终用户是谁很好

i、 e.如果要发送给运行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
人们必须小心柏油,以及如何使用柏油/提取,例如,如果我跑步

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


pwd
/主页/我的用户名

tar -xvzf passwd.tar.gz
这将产生 /home/myusername/etc/passwd

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

 Removing leading `/' from member names

gzip
就其本质而言,只压缩单个文件。要将多个文件放在一个文件中以供后续gzip处理,请使用
tar
。可能重复的谢谢。这会压缩“folderToCompress”(即递归)下的所有内容吗?folderToCompress中的所有内容都将转到compressFileName您可能需要选择
compressFileName
,因此它包含
.tar.gz
扩展名,否则您会让其他人发疯。这也适用于任意数量的目录,例如,
tar-zcvf two-dirs.tar.gz dir one-dir two
将创建一个包含两个目录的存档。还可以使用
*
压缩当前目录中的所有内容,即:
tar-zcvf all.tar.gz*
除了可移植之外,如果您想将参数传递给gzip(例如--test或--best),因为afaik甚至GNUtar都没有提供一种向gzip发送参数的方法。这是一种通用的方法,因为您还可以使用其他压缩器。例如
pigz
,它更快,因为它可以更好地利用cpu(zip的多线程实现)。