Linux_Shell脚本学习第七章-归档压缩

一、使用tar归档

tar命令可以创建、更新、检查以及解包归档文件。

1.1 用tar创建归档文件

tar命令可以接受一组文件名或是通配符(如*.txt),以此指定需要进行归档的源文件。命
令执行完毕后,所有的源文件都会被归入指定的归档文件中。

$ tar -cf output.tar [SOURCES]

选项-c表示创建新的归档文件。选项-f表示归档文件名,该选项后面必须跟一个文件名称:

$ tar -cf archive.tar file1 file2 file3 folder1 ..

1.2 选项-t可以列出归档文件中所包含的文件

$ tar -tf archive.tar
file1
file2

1.3 选项-t可以列出归档文件中所包含的文件

选项-v或-vv参数可以在命令输出中加入更多的细节信息。

$ tar -tvf archive.tar
-rw-rw-r-- shaan/shaan 0 2013-04-08 21:34 file1
-rw-rw-r-- shaan/shaan 0 2013-04-08 21:34 file2

1.4 向归档文件中追加文件

选项-r可以将新文件追加到已有的归档文件末尾

$ tar -rvf original.tar new_file

1.4 从归档文件中提取文件或目录

选项-x可以将归档文件的内容提取到当前目录

$ tar -xf archive.tar

使用-x时,tar命令将归档文件中的内容提取到当前目录。我们也可以用选项-C来指定将文件提取到哪个目录:

$ tar -xf archive.tar -C /path/to/extraction_directory

该命令将归档文件的内容提取到指定目录中。它提取的是归档文件中的全部内容。我们可以通过将文件名作为命令行参数来提取特定的文件:

$ tar -xvf file.tar file1 file4

上面的命令只提取file1和file4,忽略其他文件。

1.5 在tar中使用stdin和stdout

在归档时,我们可以将stdout指定为输出文件,这样另一个命令就可以通过管道来读取(作为stdin)并进行其他处理。
当通过安全shell(Secure Shell,SSH)传输数据时,这招很管用。例如:

$ tar cvf - files/ | ssh user@example.com "tar xv -C Documents/"

在上面的例子中,对files目录中的内容进行了归档并将其输出到stdout(由-指明),然后
提取到远程系统中的Documents目录中。

1.6 拼接两个归档文件

假设我们现在有两个tar文件:file1.tar和file2.tar。下面的命令可以将file2.tar的内容合并到file1.tar中:

$ tar -Af file1.tar file2.tar

1.7 通过检查时间戳来更新归档文件中的内容

追加选项(-r)可以将指定的任意文件加入到归档文件中。如果同名文件已经存在,那么归档文件中就会包含两个名字一样的文件。我们可以用更新选项-u指明:只添加比归档文件中的同名文件更新(newer)的文件。

$ tar -tf archive.tar
filea
fileb
filec

仅当filea自上次被加入archive.tar后出现了改动才对其执行追加操作:

$ tar -uf archive.tar filea

如果两个filea的时间戳相同,则什么都不会发生。

1.8 比较归档文件与文件系统中的内容

选项-d可以将归档中的文件与文件系统中的文件作比较。这个功能能够用来确定是否需要创建新的归档文件。

$ tar -df archive.tar
afile: Mod time differs
afile: Size differs

1.9 从归档中删除文件

我们可以用–delete选项从归档中删除文件:

$ tar -f archive.tar --delete file1 file2 ..

例如

$ tar -tf archive.tar
filea
fileb
filec
$ tar --delete --file archive.tar filea
$ tar -tf archive.tar
fileb
filec

1.10 压缩tar归档文件

tar命令默认只归档文件,并不对其进行压缩。不过tar支持用于压缩的相关选项。压缩能够显著减少文件的体积。归档文件通常被压缩成下列格式之一。
 gzip格式:file.tar.gz或file.tgz。
 bzip2格式:file.tar.bz2。
 Lempel-Ziv-Markov格式:file.tar.lzma。

不同的tar选项可以用来指定不同的压缩格式:
 -j指定bunzip2格式;
 -z指定gzip格式;
 --lzma指定lzma格式。

不明确指定上面那些特定的选项也可以使用压缩功能。tar能够基于输出或输入文件的扩展名来进行压缩。为了让tar支持根据扩展名自动选择压缩算法,使用-a或–auto-compress选项:

$ tar -acvf archive.tar.gz filea fileb filec
filea
fileb
filec
$ tar -tf archive.tar.gz
filea
fileb
filec

1.11 在归档过程中排除部分文件

选项–exclude [PATTERN]可以将匹配通配符模式的文件排除在归档过程之外。
例如,排除所有的.txt文件:

$ tar -cf arch.tar * --exclude "*.txt"

也可以将需要排除的文件列表放入文件中,同时配合选项-X:

$ cat list
filea
fileb
$ tar -cf arch.tar * -X list

1.12 排除版本控制目录

tar的选项–exclude-vcs可以在归档时排除版本控制相关的文件和目录。例如:

$ tar --exclude-vcs -czvvf source_code.tar.gz eye_of_gnome_svn

1.13 打印总字节数

选项-totals可以打印出归档的总字节数。注意,这是实际数据的字节数。如果使用了压缩选项,文件大小会小于总的归档字节数:

$ tar -cf arc.tar * --exclude "*.txt" --totals
Total bytes written: 20480 (20KiB, 12MiB/s)

二、使用cpio 归档

cpio通过stdin获取输入文件名并将归档文件写入stdout。我们必须将stdout重定向到文件中来保存cpio的输出。
(1) 创建测试文件:

$ touch file1 file2 file3

(2) 归档测试文件:

$ ls file* | cpio -ov > archive.cpio

(3) 列出cpio归档文件中的内容:

$ cpio -it < archive.cpio

(4) 从cpio归档文件中提取文件:

$ cpio -id < archive.cpio

对于归档命令cpio:
 -o指定了输出;
 -v用来打印归档文件列表。
对于列出给定cpio归档文件中所有内容的命令:
 -i用于指定输入;
 -t用于列出归档文件中的内容。

三、使用gzip压缩数据

3.1 使用gzip压缩文件

$ gzip filename
$ ls
filename.gz

3.2 解压缩gzip文件

$ gunzip filename.gz
$ ls
filename

3.3 列出压缩文件的属性信息

$ gzip -l test.txt.gz
compressed uncompressed ratio uncompressed_name
35 6 -33.3% test.txt

3.4 gzip命令可以从stdin中读入文件并将压缩文件写出到stdout

从stdin读入并将压缩后的数据写出到stdout:

$ cat file | gzip -c > file.gz

选项 -c用来将输出指定到stdout。该选项也可以与cpio配合使用:

$ ls * | cpio -o | gzip -c > cpiooutput.gz
$ zcat cpiooutput.gz | cpio -it

3.5 我们可以指定gzip的压缩级别。–fast或–best选项分别提供最低或最高的压缩率。

3.6 压缩归档文件

后缀.gz表示的是经过gzip压缩过的tar归档文件。有两种方法可以创建此类文件。

3.6.1 第一种方法

$ tar -czvvf archive.tar.gz [FILES]

或者

$ tar -cavvf archive.tar.gz [FILES]

选项-z指明用gzip进行压缩,选项-a指明根据文件扩展名推断压缩格式。

3.6.2 第二种方法

首先,创建一个tar归档文件:

$ tar -cvvf archive.tar [FILES]

压缩tar归档文件:

$ gzip archive.tar

如果有大量文件(上百个)需要归档及压缩,我们可以采用第二种方法并稍作变动。将多个文件作为命令行参数传递给tar的问题在于后者能够接受的参数有限。要解决这个问题,我们可以在循环中使用追加选项(-r)来逐个添加文件:

FILE_LIST="file1 file2 file3 file4 file5"
for f in $FILE_LIST;
	do
	tar -rvf archive.tar $f
done
gzip archive.tar

3.7 zcat——直接读取gzip格式文件

zcat命令无需经过解压缩操作就可以将.gz文件的内容输出到stdout。.gz文件不会发生任何变化。

$ ls
test.gz

$ zcat test.gz
A test file
# 文件test中包含了一行文本"A test file"

$ ls
test.gz

3.8 压缩率

我们可以指定压缩率,它共有9级,其中:
 1级的压缩率最低,但是压缩速度最快;
 9级的压缩率最高,但是压缩速度最慢。
可以按照下面的方法指定压缩比:

$ gzip -5 test.img

gzip默认使用第6级,倾向于在牺牲一些压缩速度的情况下获得比较好的压缩率。

3.9 使用bzip2

bzip2在功能和语法上与gzip类似。不同之处在于bzip2的压缩效率比gzip更高,但花费的时间比gzip更长。
用bzip2进行压缩:

$ bzip2 filename

解压缩bzip2格式的文件:

$ bunzip2 filename.bz2

生成tar.bz2文件并从中提取内容的方法同之前介绍的tar.gz类似:

$ tar -xjvf archive.tar.bz2

其中,-j表明该归档文件是以bzip2格式压缩的。

四、使用zip 归档及压缩

4.1 创建zip格式的压缩归档文件

$ zip archive_name.zip file1 file2 file3...

例如:

$ zip file.zip file

4.2 选项-f可以对目录进行递归式归档

$ zip -r archive.zip folder1 folder2

4.3 unzip命令可以从ZIP文件中提取内容

$ unzip file.zip

在完成提取操作之后,unzip并不会删除file.zip(这一点与unlzma和gunzip不同)。

4.4 选项-u可以更新压缩归档文件中的内容

$ zip file.zip -u newfile

4.5 选项-d从压缩归档文件中删除一个或多个文件

$ zip -d arc.zip file.txt

4.6 选项-l可以列出压缩归档文件中的内容

$ unzip -l archive.zip
©️2020 CSDN 皮肤主题: 书香水墨 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值