tar指令

    tar指令,应该是很常用的指令了,最常用于打包和解包,但在使用过程中还是经常敲错,因此记录一下注意事项。

    在虚拟机中模拟一下,/home/alex/test下有多个文件和文件夹。本文中都是在/home/alex目录进行操作。

   最常用的打包压缩功能:tar -zcvf  xxx.tar.gz  test。结果会在当前路径下产生一个xxx.tar.gz文件,内容就是 /home/alex/test目录及目录下的内容压缩包,即前缀路径/home/alex也会被包含进来。

    相应的解包解压缩功能: tar -zxvf  xxx.tar.gz,结果会在当前路径下产生一个路径,内容为 /home/alex/test目录及该目录下的内容。


    其中的参数作用分别为:

            -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目录。该参数可以用于打包时去除前缀路径

              eg: tar  -C  /home/alex  -zcvf  xxx.tar.gz   test   ,则在当前路径会出现一个xxx.tar.gz,且其内容只有test文件夹及其中的内容,不会包含 /home/alex路径

            --exclude=filename/dirname      打包时不包含某些目录下的文件或文件夹。注意exclude跟着的文件或文件夹,是根据当前路径或-C参数切换到的路径的相对路径(+_+自己读得都绕。。)

            eg:tar  -zcvf  xxx.tar.gz   test --exclude=test/hello.txt,则打包压缩后的内容不包含 /home/alex/test/hello.txt这个文件。

        eg2: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的内容,但是这个路径的内容并不存在。

        eg3: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的内容。