Linux tar命令

时间:2019-08-20 17:58:26  来源:igfitidea点击:

tar(Tap Archive)命令用于归档文件。

归档文件是一个有很多文件的文件,这些文件可以被提取为其原始格式。
这些存档文件被称为tar包。

tar不执行压缩,但是这些归档文件可以通过使用压缩实用程序来压缩,例如gzip(z),bzip2(bj2)、压缩(Z)等

tar如何打包

下面是tar命令中使用到的标志:

  1. -c=创建存档

  2. -v=详细信息

  3. -f=使用文件归档

  4. -x=提取

语法:

打包3个文件
tar tarfilename.tar file1 file2 file3

或者

打包1个目录
tar tarfilename.tar directory-name

或者

同时打包文件和目录
tar tarfilename.tar file1 file2 file3 directory-name

打包时进行压缩

tar提供了许多压缩程序,例如gzip、bzip2、xz、lzip、lzma或者compress,

通常只使用两个压缩工具:

-z=gzip(tar.gz)

-j=bzip2(tar.bj2)

这两个标签和-c(create)和-x(extract)一起使用。

示例

gzip:
	tar -cvzf test.tar.gz file1 file2
	tar -cvzf test.tar.gz directory-name
bzip2:
	tar -cvjf test.tar.bj2 file1 file2
	tar -cvjf test.tar.bj2 directory-name

提取tar包

使用-x选项提取。
如果存在压缩,则-x选项和压缩标识一起使用
例如 -xz(用于gzip),-xj(用于bzip2)

gzip:
	tar -zxvf test.tar.gz 
bzip2:
	tar -xvjf test.tar.bj2

查看tar包中的文件。

使用-t标志可以列出tar包中的文件和目录

tar -tvf package-name.tar
tar -tvf package-name.tar.gz
tar -tvf package-name.tar.bj2

如何将tar包提取到指定位置

默认情况下,命令tar -xvzf package-name.tar.gz将提取文件到当前目录。

如果我们想更改存放的位置,则可以使用标志-C(大写C)

例如:

tar -xvf test.tar -C /opt

tar -xvzf test.tar.gz  -C /opt

tar -xvjf test.tar.bj2 -C /opt

如何追加文件到tar包中

使用-r选项将文件或者目录追加到现有的没有压缩的tar包中

例如:

Hyman@theitroad:/tmp$ tar -rvf Hyman.tar newfile 
newfile
Hyman@theitroad:/tmp$ tar -tvf Hyman.tar
-rw-rw-r-- linux/linux       8 2013-07-10 07:02 file1
-rw-rw-r-- linux/linux       0 2013-07-10 07:02 file2
drwxrwxr-x linux/linux       0 2013-07-10 09:58 test/
-rw-rw-r-- linux/linux       0 2013-07-10 09:58 test/dddd
-rw-rw-r-- linux/linux       9 2013-07-10 11:42 newfile
Hyman@theitroad:/tmp$

如果是压缩的tar包,则不能向其追加文件,否则会报错:

tar: Cannot update compressed archives

如何只提取tar包中的某个文件?

语法格式:

tar -xvf archive-file-name.tar /path/of/fileORdir

或者

tar -xvzf archive-file-name.tar.gz /path/of/fileORdir

或者

tar -xvjf archive-file-name.tar.bj2 /path/of/fileORdir

如何使用通配符从tar包中提取多个文件

如果要使用通配符*(星号)提取多个文件或者目录,则必须使用名为–wildcards的开关。

例如:

Hyman@theitroad:/tmp/workshop$ tar -xvf Hyman.tar  --wildcards file*
file1
file2