zoukankan      html  css  js  c++  java
  • tar命令的一些常用参数举例


    tar命令用来将多个文件归档成一个文件。用法为:tar [选项] [文件]

    [root@osker ~]# tar --help
    Usage: tar [OPTION...] [FILE]...
    GNU `tar' saves many files together into a single tape or disk archive, and can
    restore individual files from the archive.
    ...

    GUN官方文档:https://www.gnu.org/software/tar/manual/tar.pdf


    测试环境

    [root@backup ~]# cat /etc/redhat-release 
    CentOS Linux release 7.6.1810 (Core) 
    [root@backup ~]# uname -r
    3.10.0-957.el7.x86_64
    [root@backup ~]# rpm -qa tar
    tar-1.26-35.el7.x86_64




    1.打包并压缩

    [root@osker ~]# tar -czvf ./osker.tar.gz /osker/*
    tar: Removing leading `/' from member names
    /osker/foo1.txt
    /osker/foo2.txt
    /osker/foo3.txt
    [root@osker ~]# ll
    -rw-r--r-- 1 root root 135 Apr 12 20:03 osker.tar.gz

    -c, --create    create a new archive
    -c或--create    建立新的备份文件

    -z, --gzip, --gunzip, --ungzip    filter the archive through gzip
    -z或--gzip或--ungzip            通过gzip指令处理备份文件

    -j或--bzip2    支持bzip2解压文件
    -J或--xz    支持xz解压文件

    -v, --verbose    verbosely list files processed
    -v或--verbose    显示指令执行过程  

    -f, --file=ARCHIVE        use archive file or device ARCHIVE
    -f或--file=备份文件        指定备份文件

     
     
    2.查看压缩包  

    [root@osker ~]# tar -tf osker.tar.gz
    osker/foo1.txt
    osker/foo2.txt
    osker/foo3.txt

    -t, --list    list the contents of an archive
    -t或--list    列出备份文件的内容



    3.解压

    [root@osker ~]# tar -xf osker.tar.gz
    [root@osker ~]# tree ./osker
    ./osker
    ├── foo1.txt
    ├── foo2.txt
    └── foo3.txt
    0 directories, 3 files
    #使用-C,来指定解压的位置
    [root@osker ~]# tar -xf osker.tar.gz -C /opt/
    [root@osker ~]# tree /opt
    /opt
    └── osker
        ├── foo1.txt
        ├── foo2.txt
        └── foo3.txt
    1 directory, 3 files

    -x, --extract, --get    extract files from an archive
    -x或--extract或--get    从备份文件中还原文件

    -C, --directory=DIR    change to directory DIR
    -C <目录>            解压到指定的目录
     
     
     
    4.打包压缩时候排除某些文件

    详见链接:https://www.cnblogs.com/osker/p/12427447.html
    需使用以下参数:
        --exclude=PATTERN        exclude files, given as a PATTERN
    -X, --exclude-from=FILE        exclude patterns listed in FILE
    -T, --files-from=FILE        get names to extract or create from FILE

    [root@localhost ~]# cat tar-include
    /root
    [root@localhost ~]# cat tar-exclude
    /root/rootbak.tar
    /root/tmp.tar.bz2
    [root@localhost ~]# tar czvf mybackup.tgz -T /root/tar-include -X /root/tar-exclude

    5.不移除文件名称前的“/”号
    平时打包的时候如果使用绝对路径的时候,打包会有提示:tar: Removing leading `/' from member names。加上-P参数就不会提示了,但打包的时候会将“/”目录加进去,如果解压这个压缩包的时候当前目录为“/”就比较危险。
    下面这一个参数慎用!!! 下面这一个参数慎用!!! 下面这一个参数慎用!!!

    [root@osker ~]# tar -czvPf foo.tar.gz /tmp
    /tmp/
    /tmp/.font-unix/
    /tmp/.Test-unix/
    /tmp/.XIM-unix/
    /tmp/.ICE-unix/
    /tmp/.X11-unix/
    /tmp/gen.txt
    [root@osker ~]# tar -czvf foo.tar.gz /tmp
    tar: Removing leading `/' from member names
    /tmp/
    /tmp/.font-unix/
    /tmp/.Test-unix/
    /tmp/.XIM-unix/
    /tmp/.ICE-unix/
    /tmp/.X11-unix/
    /tmp/gen.txt 

    -P, --absolute-names       don't strip leading `/'s from file names
    -P或--absolute-names:文件名使用绝对名称,不移除文件名称前的“/”号;
    大家还是忘了它吧!!!


    6.打包软连接的源文件
    打包压缩时候遇到文件中有软连接文件的时候,建议使用-h参数,以免打包后软链接失效!

    [root@osker ~]# ll osker
    total 0
    lrwxrwxrwx 1 root root 11 Apr 12 21:08 e.ln -> /root/e.txt
    -rw-r--r-- 1 root root  0 Apr 12 20:03 foo1.txt
    -rw-r--r-- 1 root root  0 Apr 12 20:03 foo2.txt
    -rw-r--r-- 1 root root  0 Apr 12 20:03 foo3.txt
    [root@osker ~]# cat osker/e.ln
    osker/excd.txt
    [root@osker ~]# tar -czvhf ./soft.tar.gz ./osker
    ./osker/
    ./osker/foo1.txt
    ./osker/foo2.txt
    ./osker/foo3.txt
    ./osker/e.ln
    [root@osker ~]# tar -xf ./soft.tar.gz -C /opt
    [root@osker ~]# tar -czvf ./osker.tar.gz ./osker
    ./osker/
    ./osker/foo1.txt
    ./osker/foo2.txt
    ./osker/foo3.txt
    ./osker/e.ln
    [root@osker ~]# tar -xf ./osker.tar.gz -C /tmp
    [root@osker ~]# rm -f e.txt
    [root@osker ~]# cat /opt/osker/e.ln
    osker/excd.txt
    [root@osker ~]# cat /tmp/osker/e.ln
    cat: /tmp/osker/e.ln: No such file or directory

    #注意:h需要写到f前面。
    -h, --dereference    follow symlinks; archive and dump the files they point to
    -h或--dereference    归档时,打包软连接的源文件


    7.保留文件的原本属性
    平时打包压缩文件的时候多数都要用来备份的,这个时候就需要保留文件的原本属性,就需要用到-p参数。

    [root@osker ~]# tar -czvpf ./etc.tar.gz /etc

    #注意:p需要写到f前面。
    -p, --preserve-permissions, --same-permissions    extract information about file permissions,(default for superuser)
    -p或--same-permissions或--same-permissions        用原来的文件权限还原文件;

     

    8.打包的时候只将较指定日期更新的文件保存到备份文件里
    -N, --newer=DATE-OR-FILE, --after-date=DATE-OR-FILE
    -N <日期格式> 或 --newer=<日期时间>:只将较指定日期更新的文件保存到备份文件里

    [root@instance-16 ~]# ls -l --time-style=full-iso
    total 12
    -rw-r--r--. 1 root root  483 2020-04-11 09:01:29.905704747 +0800 3.txt
    -rw-r--r--. 1 root root 1080 2020-04-12 15:43:03.207986554 +0800 passwd
    drwxr-xr-x. 2 root root    6 2020-04-12 15:15:24.432926152 +0800 qiu
    -rw-r--r--. 1 root root  151 2020-03-27 06:45:33.571820634 +0800 test.txt
    -rw-r--r--. 1 root root    0 2020-04-13 07:17:12.856865010 +0800 tt.txt
    [root@instance-16 ~]# tar -N '2020-04-12' -czvf /tmp/o.tar ./*
    tar: Option --after-date: Treating date `2020-04-12' as 2020-04-12 00:00:00
    tar: ./3.txt: file is unchanged; not dumped
    ./passwd
    ./qiu/
    tar: ./test.txt: file is unchanged; not dumped
    ./tt.txt

    可以从提示中看到有2个文件没有被打包进去。



    9.添加文件到已有的打包文件中
    -r, --append    append files to the end of an archive
    -r                添加文件到已经压缩的文件

    [root@backup test]# tar -tf fo2.tar
    foo2.txt
    anaconda-ks.cfg
    [root@backup test]# tar -rvf fo2.tar ~/foo
    foo1.txt  foo2.txt  foo3.txt  
    [root@backup test]# tar -rvf fo2.tar ~/foo1.txt
    tar: Removing leading `/' from member names
    /root/foo1.txt
    [root@backup test]# tar -tf fo2.tar
    foo2.txt
    anaconda-ks.cfg
    root/foo1.txt

    #注意:只能将新文件更新到打包文件里,不能更新到压缩文件。



    10.添加改变了的文件到已经存在的打包文件中
    -u, --update    only append files newer than copy in archive
    -u                添加改变了的文件到已经存在的打包文件中

    [root@osker ~]# tar -cvf os.tar ./osker
    ./osker/
    ./osker/1.txt
    ./osker/2.txt
    ./osker/3.txt
    [root@osker ~]# echo "up" > osker/3.txt
    [root@osker ~]# tar -uvf os.tar ./osker
    ./osker/3.txt

    #注意:只能将新文件更新到打包文件里,不能更新到压缩文件。


    11.从归档中删除文件
    --delete    delete from the archive (not on mag tapes!)
    --delete    从归档中删除文件

    [root@backup ~]# tar -tf /opt/foo.tar
    ./anaconda-ks.cfg
    ./del.txt
    ./foo1.txt
    ./foo2.txt
    ./foo3.txt
    [root@backup ~]# cd /opt
    [root@backup opt]# tar --delete del.txt -vf foo.tar
    tar: del.txt: Not found in archive
    tar: Exiting with failure status due to previous errors
    [root@backup opt]# tar --delete ./del.txt -vf foo.tar
    [root@backup opt]# tar -tf foo.tar
    ./anaconda-ks.cfg
    ./foo1.txt
    ./foo2.txt
    ./foo3.txt

    可以看到del.txt已经没有在foo.tar包中了。


    12.新增归档文件到另一个归档文件
    -A, --catenate, --concatenate   append tar files to an archive
    -A或--catenate:新增归档文件到另一个归档文件

    [root@backup ~]# tar -cf test/fo1.tar anaconda-ks.cfg
    [root@backup ~]# tar -cf test/fo2.tar foo2.txt
    [root@backup ~]# cd test
    [root@backup test]# tar -A fo1.tar -vf fo2.tar
    [root@backup test]# tar -tf fo2.tar
    foo2.txt
    anaconda-ks.cfg

    可以看到fo1.tar中得anaconda-ks.cfg已经添加到fo2.tar中了。


    13.解压时候,将文件得mtime修改为当前时间
    -m, --touch        don't extract file modified time
    -m或--touch        解压时候,将文件得mtime修改为当前时间

    [root@backup test]# tar -xf fo2.tar
    [root@backup test]# ll
    total 24
    -rw------- 1 root root  1392 Apr 19  2019 anaconda-ks.cfg
    -rw-r--r-- 1 root root 20480 Apr 13 18:45 fo2.tar
    -rw-r--r-- 1 root root     0 Apr 13 18:22 foo2.txt
    [root@backup test]# rm foo2.txt anaconda-ks.cfg -f
    [root@backup test]# tar -mxf fo2.tar
    [root@backup test]# ll
    total 24
    -rw------- 1 root root  1392 Apr 13 18:53 anaconda-ks.cfg
    -rw-r--r-- 1 root root 20480 Apr 13 18:45 fo2.tar
    -rw-r--r-- 1 root root     0 Apr 13 18:53 foo2.txt

    可以看到加-m参数后解压出来得文件mtime为当前时间。



  • 相关阅读:
    wap学习记录
    vue router
    webpack 之 缓存处理
    webpack 之 plugin
    webpack 之 loader
    babel实践
    webpack 之 webpack-dev-server自动刷新
    webpack之source map
    vue笔记
    《高性能网站建设指南》笔记
  • 原文地址:https://www.cnblogs.com/osker/p/12693605.html
Copyright © 2011-2022 走看看