tar 命令详解

| 选择喜欢的代码风格  

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

tar 命令安装:


-bash/zsh: tar command not found

#Debian
apt-get install tar

#Ubuntu
apt-get install tar

#Alpine
apk add tar

#Arch Linux
pacman -S tar

#Kali Linux
apt-get install tar

#CentOS
yum install tar

#Fedora
dnf install tar

#Raspbian
apt-get install tar

#Docker
docker run cmd.cat/tar tar

tar 命令补充说明:


tar 命令可以为 Linux 的文件和目录创建档案。利用 tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。

为什么要区分这两个概念呢?这源于 Linux 中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar 命令),然后再用压缩程序进行压缩(gzip bzip2 命令)。

tar 命令语法:


tar [-] A --catenate --concatenate | c --create | d --diff --compare | 
    --delete | r --append | t --list | --test-label | u --update | 
    x --extract --get [options] [pathname ...]

tar 命令选项:


-A或--catenate:新增文件到以存在的备份文件;
-B:设置区块大小;
-c或--create:建立新的备份文件;
-C [目录]:这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项;
-d:记录文件的差别;
-x或--extract或--get:从归档文件中提取文件,可以搭配-C(大写)在特定目录解开,
                     需要注意的是-c、-t、-x不可同时出现在一串命令中;
-t或--list:列出备份文件的内容;
-z或--gzip或--ungzip:通过gzip指令压缩/解压缩文件,文件名最好为 *.tar.gz;
-Z或--compress或--uncompress:通过compress指令处理备份文件;
-f[备份文件]或--file=[备份文件]:指定备份文件;
-v或--verbose:显示指令执行过程;
-r:添加文件到已经压缩的文件;
-u:添加改变了和现有的文件到已经存在的压缩文件;
-j:通过bzip2指令压缩/解压缩文件,文件名最好为*.tar.bz2;
-v:显示操作过程;
-l:文件系统边界设置;
-k:保留原有文件不覆盖;
-m:保留文件不被覆盖;
-w:确认压缩文件的正确性;
-p或--same-permissions:保留原来的文件权限与属性;
-P或--absolute-names:使用文件名的绝对路径,不移除文件名称前的“/”号;
-N [日期格式] 或 --newer=[日期时间]:只将较指定日期更新的文件保存到备份文件里;
--exclude=[范本样式]:排除符合范本样式的文件;
--remove-files:归档/压缩之后删除源文件

tar 命令参数:


文件或目录:指定要打包的文件或目录列表。

tar 命令实例:


- z:有gzip属性的
- j:有bz2属性的
- Z:有compress属性的
- v:显示所有过程
- O:将文件解开到标准输出

下面的参数 -f 是必须的:

-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名

tar -cf all.tar *.jpg
# 这条命令是将所有 .jpg 的文件打成一个名为 all.tar 的包。-c 是表示产生新的包,-f指定包的文件名。


tar -rf all.tar *.gif
# 这条命令是将所有 .gif 的文件增加到 all.tar 的包里面去。-r 是表示增加文件的意思。


tar -uf all.tar logo.gif
# 这条命令是更新原来tar包 all.tar 中 logo.gif 文件,-u 是表示更新文件的意思。


tar -tf all.tar
# 这条命令是列出 all.tar 包中所有文件,-t是列出文件的意思
tar -cfv archive.tar foo bar  # 从文件foo和bar创建archive.tar。
tar -tvf archive.tar         # 详细列出archive.tar中的所有文件。
tar -xf archive.tar          # 从archive.tar提取所有文件。

用 tar 命令,将文件全部打包成 tar 包:

tar -cvf log.tar log2012.log    仅打包,不压缩!
tar -zcvf log.tar.gz log2012.log   打包后,以 gzip 压缩
tar -jcvf log.tar.bz2 log2012.log  打包后,以 bzip2 压缩

解压目录 - 去掉第一层目录结构,要出除第二层,--strip-components 2

tar -xvf portal-web-v2.0.0.tar --strip-components 1  -C 指定目录

用 tar 命令,将 tar 的包解压缩 :

tar -zxvf /opt/soft/test/log.tar.gz

tar 命令的坑:


遇到错误提示:tar: Removing leading `/’ from member names ,原因是 tar 默认为相对路径,使用绝对路径的话就回报这个错,可以使用 -P 参数(注意大写)解决这个问题:

...

tar -zcvPf ${backup_dir}${backup_file_date}_baidu.bes.dsp.request.tar.gz ${log_path}

tar 命令扩展阅读:




tar 命令评论