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

Dou*_*oug 191 linux bash shell gzip

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

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

ami*_*jer 375

tar -zcvf compressFileName.tar.gz folderToCompress
Run Code Online (Sandbox Code Playgroud)

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

编辑:经过审核和评论后,我意识到人们可能会在没有扩展名的情况下与compressFileName混淆.如果需要,可以使用.tar.gz扩展名(如建议的那样)和compressFileName

  • 您可能想要选择`compressFileName`,因此它包含`.tar.gz`扩展名,否则您将驱使其他所有人疯狂. (78认同)
  • 这也适用于任意数量的目录,例如`tar -zcvf two-dirs.tar.gz dir-one dir-two`将创建包含两个目录的存档. (9认同)
  • 也可以使用`*`来压缩当前目录中的所有内容,即:``tar -zcvf all.tar.gz*` (5认同)
  • 谢谢.这会压缩"folderToCompress"下的所有内容(即递归)吗? (2认同)
  • folderToCompress中的所有内容都将进入compressFileName (2认同)
  • 但是我知道你是否使用。tar将尝试压缩新的zipfile本身,而不是*它将失败。 (2认同)

Vin*_*yon 59

有许多压缩方法可以递归地运行命令行,并且知道最终用户是谁.

即如果它被发送给运行Windows的人,那么zip可能是最好的:

zip -r file.zip folder_to_zip

unzip filenname.zip
Run Code Online (Sandbox Code Playgroud)

对于其他Linux用户或你的自我焦油是伟大的

tar -cvzf filename.tar.gz folder

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

#change the -c to -x to above to extract
Run Code Online (Sandbox Code Playgroud)

人们必须小心使用焦油以及如何涂抹/提取物品,例如,如果我跑步

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


pwd
Run Code Online (Sandbox Code Playgroud)

/家/名为myUsername

tar -xvzf passwd.tar.gz
Run Code Online (Sandbox Code Playgroud)

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

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

 Removing leading `/' from member names
Run Code Online (Sandbox Code Playgroud)


Jer*_*her 18

@amitchhajer的帖子适用于GNU tar.如果有人发现此帖并需要它在NON GNU系统上工作,他们可以这样做:

tar cvf - folderToCompress | gzip > compressFileName
Run Code Online (Sandbox Code Playgroud)

要扩展存档:

zcat compressFileName | tar xvf -
Run Code Online (Sandbox Code Playgroud)

  • 除了可移植之外,如果你想将参数传递给gzip(例如, - test或--best),这个解决方案很有用,因为afaik甚至GNU tar也没有提供向gzip发送参数的方法. (2认同)