我正在尝试在UNIX中压缩文件夹。可以使用gzip命令完成吗?
tar
; 它支持压缩选项。 gzip
被设计为对的补充tar
,而不是替代。
comment
因为那不是他问题的答案。
1
并2
位于文件夹下playground
。gzip -r ./playground
会给你1.gz
和2.gz
(并没有更多1
和2
文件)文件夹下playground
,不与它的一切一个压缩文件。
我正在尝试在UNIX中压缩文件夹。可以使用gzip命令完成吗?
tar
; 它支持压缩选项。 gzip
被设计为对的补充tar
,而不是替代。
comment
因为那不是他问题的答案。
1
并2
位于文件夹下playground
。gzip -r ./playground
会给你1.gz
和2.gz
(并没有更多1
和2
文件)文件夹下playground
,不与它的一切一个压缩文件。
Answers:
没有。
不同于zip
,仅用gzip
作压缩算法。
由于种种原因,其中一些倾听回磁带驱动器的时代,UNIX使用一个命名的程序tar
来存档数据,然后可以用压缩程序等压缩gzip
,bzip2
,7zip
,等。
为了“压缩”目录,正确的命令是
tar -zcvf archive.tar.gz directory/
这将告诉tar
给
使用z(gzip)算法对其进行压缩
c(根据)directory
(tar
中的默认设置是递归的)文件中的一个创建存档
v(详细地)列出(在/ dev / stderr上,因此不会影响管道命令)列表中添加到归档文件中的所有文件。
并将输出存储为名为f的文件archive.tar.gz
该tar
命令纯粹为了您的方便而提供gzip
支持(通过-z
标志)。的gzip
命令/ lib中是完全分开的。上面的命令实际上与
tar -cv directory | gzip > archive.tar.gz
要将存档解压缩并解压缩到当前目录,请使用
tar -zxvf archive.tar.gz
该命令实际上与
gunzip < archive.tar.gz | tar -xv
tar
还有很多很多其他选择和用途;我衷心建议您一定要通读其联机帮助页。
tar -cv directory | gzip > archive.tar.gz
。然后可以使用tar -zxvf
甚至提取生成的存档zcat file.tar.gz | tar -xv
。要点是tar完全独立于gzip,该tar
命令仅包含gzip支持以方便使用。
tar cvzf
了一段时间了。需要注意的一件事:如果使用Windows(7-zip
需指定)解压缩*.tar.gz
文件,则需要两轮操作。一种将*.tar.gz
文件解压缩到*.tar
文件中,另一种将tar文件解压缩到原始内容中。它增加了总解压缩时间,尤其对于大文件(例如日志)
gzip
使用-r
开关时,该命令不会将目录递归压缩到单个zip文件中。而是它将遍历该目录结构,并将找到的每个文件压缩到一个单独的文件中。
之前
$ tree dir1/
dir1/
|-- dir11
| |-- file11
| |-- file12
| `-- file13
|-- file1
|-- file2
`-- file3
现在运行gzip
命令
$ gzip -r dir1
后
$ tree dir1/
dir1/
|-- dir11
| |-- file11.gz
| |-- file12.gz
| `-- file13.gz
|-- file1.gz
|-- file2.gz
`-- file3.gz
如果您希望压缩目录结构,则可能需要使用该tar
命令,然后压缩生成的.tar
文件。
$ tar zcvf dir1.tar.gz dir1/
$ tar zcvf dir1.tar.gz dir1/
dir1/
dir1/file1
dir1/file2
dir1/dir11/
dir1/dir11/file11.gz
dir1/dir11/file12.gz
dir1/dir11/file13.gz
dir1/file3
这将导致以下单个文件:
$ ls -l | grep tar
-rw-rw-r-- 1 saml saml 271 Oct 1 08:07 dir1.tar.gz
您可以确认其内容:
$ tar ztvf dir1.tar.gz
drwxrwxr-x saml/saml 0 2013-10-01 08:05 dir1/
-rw-rw-r-- saml/saml 0 2013-10-01 07:45 dir1/file1
-rw-rw-r-- saml/saml 0 2013-10-01 07:45 dir1/file2
drwxrwxr-x saml/saml 0 2013-10-01 08:04 dir1/dir11/
-rw-rw-r-- saml/saml 27 2013-10-01 07:45 dir1/dir11/file11.gz
-rw-rw-r-- saml/saml 27 2013-10-01 07:45 dir1/dir11/file12.gz
-rw-rw-r-- saml/saml 27 2013-10-01 07:45 dir1/dir11/file13.gz
-rw-rw-r-- saml/saml 0 2013-10-01 07:45 dir1/file3
我编写了以下两个命令的脚本:
gzipdir
:
#!/bin/bash
if [[ -d $1 ]]; then
cd "$1"
cd ..
base=$(basename "$1")
tar -zcvf "$base.tgz" "$base"
if [[ $? == 0 && -f "$base.tgz" ]]; then
rm -rf "$base"
fi
else
echo "Usage: $0 DIRECTORY";
fi
ungzipdir
:
#!/bin/bash
if [[ -f $1 ]]; then
base=${1%%.*}
file=$(basename "$1");
dir=$(basename "$base");
if [[ ! -d $base ]]; then
mkdir "$base"
cd "$base"
cd ..
tar -xvf "$file"
if [[ $? == 0 && -d "$dir" ]]; then
rm -f "$file"
fi
else
echo "Directory $base already exists. Nothing done."
fi
else
echo "Usage: $0 file.tgz";
fi
(!!!)请在使用前进行测试(因为存在“ rm -f”,如果使用不常见的方法,它可能会删除重要数据)。
如何使用:
cd /home/; gzipdir MyDirectory
要么 gzipdir /home/MyDirectory
将创建/home/MyDirectory.tgz并在成功时删除MyDirectory(!!!)。
ungzipdir /home/MyDirectory.tgz
将创建/ home / MyDirectory并在成功后删除/home/MyDirectory.tgz。
find ./* -maxdepth 0 -type d -exec gzipdir {} \;
谨慎使用find命令,-exec echo {}
首先对其进行测试,并确保您未捕获将压缩PARENT目录的“ ./”,这可能会破坏整个主目录)
我建议使用pigz
(并行实现GZip)
tar -cvf - dir | pigz -9 > /path/to/dir.tar.gz
问题“我可以在Linux上使用zip压缩整个文件夹吗?”的答案是使用以下语法:
zip -r <zip file name> <folder to zip>
gzip -r myfolder
它将递归gzip文件。您可以使用解压缩文件的相同方法来gunzip -r myfolder
递归解压缩文件。有关更多信息,man gzip