转自:http://www.oschina.net/question/12_146379
tar 命令用来将很多文件打包成一个单一的磁带或者磁盘归档,并可从归档文件恢复出文件列表。当你需要通过 email 发送大量文件时或者传输文件时非常有用。这里我们介绍一些基本的使用场景。
tar 的语法:
1 |
# tar [options] file.tar file1 file2 .. .. .. |
file.tar 是 tar 归档文件,而其他 file1 和 file2 等等是要被打包的文件。
例如我们有两个文件 file1.txt 和 file2.txt
1 |
[root@localhost TAR] # ll |
2 |
total 8 |
3 |
-rw-r--r--. 1 root root 2770 Feb 7 22:37 file1.txt |
4 |
-rw-r--r--. 1 root root 887 Feb 7 22:38 file2.txt |
tar 常用的使用场景
创建一个 tar 文件
语法:
1 |
# tar -cf archive.tar files .. .. |
示例:
1 |
[root@localhost TAR] # tar -cf file.tar file1.txt file2.txt |
2 |
[root@localhost TAR] # ll file.tar |
3 |
-rw-r--r--. 1 root root 10240 Feb 7 22:42 file . tar |
列出 tar 文件中的所有文件列表
1 |
# tar -tf archive.tar |
示例:
1 |
[root@localhost TAR] # tar -tf file.tar |
2 |
file1.txt |
3 |
file2.txt |
从 tar 中提取所有文件
1 |
tar -xf archive. tar |
示例
1 |
[root@localhost TAR] # tar -xf file.tar |
2 |
[root@localhost TAR] # ll |
3 |
total 20 |
4 |
-rw-r--r--. 1 root root 2770 Feb 7 22:37 file1.txt |
5 |
-rw-r--r--. 1 root root 887 Feb 7 22:38 file2.txt |
6 |
-rw-r--r--. 1 root root 10240 Feb 7 22:42 file . tar |
参数选项
1, -v, –verbose
verbosely list files processed:
Syntax:
List all files in an archive.tar verbosely:
1 |
tar -tvf archive. tar |
Example:
1 |
[root@localhost TAR] # tar -tvf file.tar |
2 |
-rw-r--r-- root/root 2770 2014-02-07 22:37 file1.txt |
3 |
-rw-r--r-- root/root 887 2014-02-07 22:38 file2.txt |
2, -c, –create
创建新的归档文件
3, -t, –list
列出归档文件中的内容
4, -x, –extract, –get
从归档中提取文件
5, -d, –diff, –compare
比较归档和文件系统的差异
Example:
01 |
[root@localhost TAR] # tar -tf file.tar |
02 |
file2.txt |
03 |
file3.txt |
04 |
file1.txt |
05 |
[root@localhost TAR] # tar -df file.tar file1.txt file2.txt file4.txt |
06 |
tar : file4.txt: Not found in archive |
07 |
tar : Exiting with failure status due to previous errors |
08 |
----Verbosely---- |
09 |
[root@localhost TAR] # tar -dvf file.tar file1.txt file2.txt |
10 |
file2.txt |
11 |
file1.txt |
12 |
[root@localhost TAR] # tar -dvf file.tar file1.txt file2.txt file6.txt |
13 |
file2.txt |
14 |
file1.txt |
15 |
tar : file6.txt: Not found in archive |
16 |
tar : Exiting with failure status due to previous errors |
6, –delete
从归档中删除某文件
示例:
从归档 file.tar 中删除 file1.txt
1 |
[root@localhost TAR] # tar --delete -f file.tar file1.txt |
2 |
[root@localhost TAR] # tar -tf file.tar |
3 |
file2.txt |
7, -r, –append
追加文件到归档中
示例:
追加 file3.txt 到 file.tar
1 |
[root@localhost TAR] # tar -rf file.tar file3.txt |
2 |
[root@localhost TAR] # tar -tf file.tar |
3 |
file1.txt |
4 |
file2.txt |
5 |
file3.txt |
8, -A, –catenate, –concatenate
将一个tar 归档追加到另外一个归档文件中
创建另外一个 tar 文件
1 |
[root@localhost TAR] # tar -cf archive.tar file1.txt file3.txt |
追加方法:
1 |
[root@localhost TAR] # tar -Af file.tar archive.tar |
2 |
[root@localhost TAR] # tar -tf file.tar |
3 |
file2.txt |
4 |
file3.txt |
5 |
file1.txt |
6 |
file1.txt |
7 |
file3.txt |
9, –test-label
测试归档卷标并退出
10, -u, –update
只追加最新的文件
示例:
1 |
[root@localhost TAR] # tar -tf file.tar |
2 |
file1.txt |
3 |
file2.txt |
4 |
[root@localhost TAR] # tar -uf file.tar file1.txt file3.txt file2.txt |
5 |
[root@localhost TAR] # tar -tf file.tar |
6 |
file1.txt |
7 |
file2.txt |
8 |
file3.txt |
11, -C, –directory=DIR
更改目录到 DIR
例如:
提取文件到另外一个目录
1 |
[root@localhost TAR] # tar -xvf file.tar -C /root/TAR2 |
2 |
file1.txt |
3 |
file2.txt |
4 |
[root@localhost TAR] # cd - |
5 |
/root/TAR2 |
6 |
[root@localhost TAR2] # ll |
7 |
total 28 |
8 |
-rw-r--r--. 1 root root 23250 Feb 7 23:11 file1.txt |
9 |
-rw-r--r--. 1 root root 887 Feb 7 22:38 file2.txt |
12, -p, –preserve-permissions
抽取文件时保留原有的文件权限
压缩归档文件,使用 BZIP 和 GZIP 两种方法
跟压缩相关的参数
13, -j, –bzip2
使用 bzip2 对归档进行压缩
示例:
1 |
[root@localhost TAR] # tar -jcf file.tar.bz file2.txt file1.txt |
2 |
[root@localhost TAR] # ll |
3 |
total 128 |
4 |
-rw-r--r--. 1 root root 23250 Feb 7 23:11 file1.txt |
5 |
-rw-r--r--. 1 root root 887 Feb 7 22:38 file2.txt |
6 |
-rw-r--r--. 1 root root 30720 Feb 7 23:30 file . tar |
7 |
-rw-r--r--. 1 root root 1797 Feb 7 23:42 file . tar .bz |
请看,上面的文件大小通过 BZIP 降低到 1797 字节。
14, -z, –gzip
使用 gzip 压缩归档
示例:
1 |
[root@localhost TAR] # tar -zcf file.tar.gz file2.txt file1.txt |
2 |
[root@localhost TAR] # ll |
3 |
total 132 |
4 |
-rw-r--r--. 1 root root 23250 Feb 7 23:11 file1.txt |
5 |
-rw-r--r--. 1 root root 887 Feb 7 22:38 file2.txt |
6 |
-rw-r--r--. 1 root root 30720 Feb 7 23:30 file . tar |
7 |
-rw-r--r--. 1 root root 1797 Feb 7 23:42 file . tar .bz |
8 |
-rw-r--r--. 1 root root 1673 Feb 7 23:45 file . tar .gz |