欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

tar

程序员文章站 2022-05-27 16:13:47
...

tar指令,应该是很常用的指令了,最常用于打包和解包,参数比较麻烦,可以使用别名;

1、打包压缩

> pwd;
/Users/stone/Downloads
> ll;
total 192
drwxr-xr-x   6 stone  staff       192 10 11 10:09 test

> tar -zcvf  test.tar.gz  test;
a test
a test/.DS_Store
a test/2.rtf
a test/1.rtf
a test/test.tar.gz

> ll;
total 1400
drwxr-xr-x   6 stone  staff       192 10 11 10:09 test
-rw-r--r--   1 stone  staff      1208 10 11 10:10 test.tar.gz

2、解包解压

>tar -zxvf  test.tar.gz
x test/
x test/._.DS_Store
x test/.DS_Store
x test/._2.rtf
x test/2.rtf
x test/._1.rtf
x test/1.rtf
x test/test.tar.gz

3、参数说明

-c, --create               create a new archive,创建一个新的归档文件;
-v, --verbose              verbosely list files processed,显式地列出处理的文件。即正在打包或解包的文件名称会在当前控制台输出;
-f, --file=ARCHIVE         use archive file or device ARCHIVE,使用归档文件或设备(进行解包或打包)。该参数后续必须跟上打包或解包的包名,指定使用的归档文件;
-x, --extract, --get       extract files from an archive,从归档文件中解出文件;
-z, --gzip, --gunzip, --ungzip   filter the archive through gzip, 通过gzip压缩方式过滤归档文件,即使用gzip进行压缩或解压缩( 注:旧版tar无法识别压缩包的压缩格式,因此解包时必须增加-z参数指定压缩方式,新版tar可以自动识别,可以不加该参数);
-C, --directory=DIR        change to directory DIR,切换到DIR目录。该参数可以用于打包时去除前缀路径;
//例:
> tar  -C  /home/alex  -zcvf  xxx.tar.gz   test   ,则在当前路径会出现一个xxx.tar.gz,且其内容只有test文件夹及其中的内容,不会包含 /home/alex路径

--exclude=filename/dirname      打包时不包含某些目录下的文件或文件夹。注意exclude跟着的文件或文件夹,是根据当前路径或-C参数切换到的路径的相对路径(+_+自己读得都绕。。)
//例1:
> tar  -zcvf  xxx.tar.gz   test --exclude=test/hello.txt,则打包压缩后的内容不包含 /home/alex/test/hello.txt这个文件。
//例2:
> tar -zcvf xxx.tar.gz  test --exclude=/home/alex/test/hello.txt,则打包后的内容还是有/home/alex/test/hello.txt这个文件,因为我们执行的当前路径是/home/alex, 系统执行exclude会以当前路径作为前缀路径加上exclude后续的路基,所以会去除/home/alex/home/alex/test/hello.txt的内容,但是这个路径的内容并不存在。
//例2:
> tar -C /home -zcvf xxx.tar.gz alex/test --exclude=alex/test/world.txt ,则打包后的内容不包含/home/alex/test/world.txt。因为-C参数切换到了 /home路径,则exclude去除了 /home+alex/test/world.txt的内容。