tar命令和排除目录或文件

来源:互联网 发布:小米手机怎么清除数据 编辑:程序博客网 时间:2024/05/29 09:08

一般直接用tar命令打包很简单,直接使用 tar -zcvf test.tar.gz test 即可。

在很多时候,我们要对某一个目录打包,而这个目录下有几十个子目录和子文件,我们需要在打包的时候排除其中1、2个目录或文件。

这时候我们在用tar命令打包的时候,增加参数 --exclude 就能达到目的。


例如:

我们以tomcat 为例,打包的时候我们要排除 tomcat/logs 目录,命令如下:

tar -zcvf tomcat.tar.gz --exclude=tomcat/logs tomcat

如果要排除多个目录,增加 --exclude 即可,如下命令排除logs和libs两个目录及文件xiaoshan.txt:

tar -zcvf tomcat.tar.gz --exclude=tomcat/logs --exclude=tomcat/libs --exclude=tomcat/xiaoshan.txt tomcat


这里要说一下注意事项:

大家都知道Linux在使用tab键的时候会对目录名称自动补全,这很方便,大家也比较常用。

如我们输入 tomcat/lo 的时候按tab键,命令行会自动生成 tomcat/logs/ ,对于目录,最后会多一个 “/”

这里大家要注意的时候,在我们使用tar 的--exclude 命令排除打包的时候,不能加“/”,否则还是会把logs目录以及其下的文件打包进去。

错误写法:

tar -zcvf tomcat.tar.gz --exclude=tomcat/logs/ --exclude=tomcat/libs/ tomcat

正确写法:

tar -zcvf tomcat.tar.gz --exclude=tomcat/logs --exclude=tomcat/libs tomcat



tar 命令
  用途
  处理归档。
  语法
  tar { -c | -r | -t | -u | -x } [ -b Blocks ] [ -B ] [ -d ] [ -F ] [ -h ] [ -i ] [ -L InputList ] [ -l ] [ -m ] [ -N Blocks ][ -o ] [ -p ] [ -s ] [ -v ] [ -w ] [ -Number ] [ -f Archive ] [ -S Blocksb | -S Feet | -S Feet@density ] [ File | Directory | -C Directory ] ...
  描述
  注意:由于在 tar 命令中对头块空间的限制,当恢复到某些系统时,大于 65,535 的用户号(UID)和组标识号(GID)将毁坏。大小约束只影响所有权和许可权而不对数据造成损害。所有权的毁坏发生在下列系统中:
  * 不使用 uname 和 gname 字段来检查所有权的系统。
  * 与归档系统没有相同的用户和组标识的系统。
  注:
  1. ustar 头格式允许文件大到 8 GB。因此,tar 命令支持归档最大 8 GB 的文件。
  2. tar 不保留任何稀疏分配的文件的稀疏属性。任何在恢复前原是稀疏的文件,将按文件大小在文件系统内分配其所有空间。
  tar 命令通过将文件写入归档存储介质或将文件从介质中取回,来处理归档。由 tar 命令使用的文件通过 File 参数来表示。如果 File 参数引用一个目录,则引用该目录并递归引用该目录下全部的文件和目录。
  tar 命令在缺省设备(通常是磁带)上寻找归档,除非使用 -f Archive 标志指定另一个设备。当为美国磁带归档程序(USTAR)格式指定大于 100 个字符的路径名称时,请记住路径名称是由一个前缀缓冲区、一个 /(斜杠)和一个名称缓冲区组成的。
  前缀缓冲区最大可以有 155 字节,而名称缓冲区最大可以容纳 100 字节。如果路径名称不能用斜杠分割为这两部分,则它不能被归档。这个限制是考虑到 tar 归档头的结构,而且必须为了符合标准和向下兼容而维护该限制。另外,硬链接或符号链接(“链接名称”)的目标长度不能超出 100 字节。
  当写到归档时,tar 命令使用一个临时文件(/tmp/tar* 文件),并在内存中维护一个包含多链接文件的表。如果 tar 命令不能创建临时文件,或者没有足够的可用内存来放置链接表,您会接收到错误消息。
  tar 命令有两组标志:必需标志和可选标志。必需标志控制 tar 命令的操作,包括 -c、-r、-t、-u 和 -x 标志。要执行 tar 命令至少要选择一个必需标志。选择了必需标志后,您可以选择一个可选标志,但它们对控制 tar 命令都不是必要的。
  注:
  1. 当存储设备是一个普通文件或一个块特殊文件时,-u 和 -r 标志可退格。然而,原始磁带设备不支持退格。因此当存储设备是原始磁带时,-u 和 -r 标志进行倒带、打开磁带并再次读取磁带。
  2. 在块磁带上记录的长度是一块,但它们通常比在原始磁带上的密度的一半还少。因此,尽管按块记录原始磁带必须被读取两遍,但磁带运动总量比从块式磁带读取一遍单块记录还少。
  3. 流式磁带设备的结构不支持在磁带最后增加信息。因此,当存储设备是流式磁带时,-u 和 -r 标志不是有效的选项。试图使用这些标志将导致下列错误消息:
  tar: 更新和替换选项对流式磁带机无效。
  4. 磁带错误无法恢复。
  5. 可以通过更改缺省块大小改善 tar 命令在 IBM 9348 磁带机 12 型上的性能。要更改块大小,请在命令行输入下列命令:
  chdev -1 <device_name> -a block_size=32k
  要了解更多关于使用磁带设备的信息,请参阅 rmt 特殊文件。
  标志
  tar 命令的标志有两组,必需的和可选的。必须提供至少一个必需标志来控制 tar 命令。
  必需标志
  -c 创建新的归档,并将由一个或多个 File 参数所指定的文件写入归档的开头。
  -r 将由一个或多个 File 参数所指定的文件写入归档的最后。这个标志不是对任何磁带设备都有效,因为有些设备不支持在磁带的最后添加信息。
  -t 按照文件在归档中的顺序列出文件。文件可能会多次列出。
  -u 只有当文件不在归档中,或写入归档后被修改过,才将这些文件(由一个或多个 File 参数所指定)写入归档的最后。-u 标志不是对任何磁带设备都有效,因为有些磁带设备不支持在磁带的最后添加信息。
  -x 从归档中抽取一个或多个 File 参数指定的文件。如果 File 参数是指一个目录, tar 命令递归地从归档中抽取那个目录。如果您未指定 File 参数,tar 命令从归档中抽取所有的文件。如果归档中包含同一文件的多个副本,最后抽取的副本覆盖所有以前抽取的副本。如果被抽取的文件在系统中不存在,则创建该文件。如果您有适当的许可权,tar 命令用与磁带上的相同所有者和组标识恢复所有文件和目录。如果您没有适当的许可权,将以您的所有者标识和组标识恢复文件和目录。只能请求文件最后出现的版本。
  可选标志
  -B 输入分块和输出分块强制为每个记录 20 块。使用这个选项,tar 命令可在那些可能未维护分块的通信信道间执行。
  -b Blocks 指定每个记录的 512 字节块数量。缺省值和最大值都是 20,这是对磁带记录适当的数目。由于记录间隙大小的原因,用大的分块因子写的磁带可以比每个记录只有一块的磁带保存更多的数据。
  当读取磁带时,块大小自动确定(-x 或 -t 功能标志)。归档被 -u 和 -r 功能更新时,使用现有的记录大小。只有当使用 -c 标志创建新的归档时,tar 命令才使用 Blocks 参数指定的值写入归档。
  当用 -f 标志输出到普通文件时,您可以使用与磁盘块大小相匹配的分块因子来节省磁盘空间(例如,对于 2048 字节的磁盘块,使用 -b4 标志)。
  -C Directory 使 tar 命令向由 Directory 变量指定的目录执行 chdir 子例程。使用 -C 标志允许归档不用相近公共父目录来关联的多个目录,使用简短的相对路径名称。例如,要从 /usr/include 和 /etc 目录中归档文件,可以使用下列命令:
  tar c -C /usr/include File1 File2 -C /etc File3 File4
  -C Directory 标志必须在所有其它标志后出现,也可以在给定的文件名列表中出现。
  -d 为块文件、特殊字符文件以及先进先出(FIFO)管道进程创建单独条目。通常,tar 命令不会归档这些特殊文件。当使用 -d 标志写入归档时,tar 命令使归档可以用 -x 标志恢复空目录、特殊文件以及先进先出(FIFO)管道进程。
  注:
  虽然任何人可以归档特殊文件,但只有拥有 root 用户权限的用户可以从归档中抽取特殊文件。
  -F 在归档前检查文件类型。源代码控制系统(SCCS),修订控制系统(RCS),名为 core、errs 和 a.out 的文件,以及以 .o(点 o)结束的文件不归档。
  -f Archive 使用 Archive 变量表示要读或写的归档。当未指定这个标志,tar 命令使用一个针对特定系统的缺省文件名(格式为 /dev/rmt0)。如果指定的 Archive 变量是 -(减号),tar 命令写入标准输出或从标准输入中读取。如果写入标准输出,您必须使用 -c 标志。
  -h 强制 tar 命令监视符号链接,就好像它们是常规文件或目录。通常,tar 命令不监视符号链接。
  -i 忽略头校验和的错误。tar 命令在归档中写入一个文件头,它包含每个文件的校验和。如果未指定这个标志,系统通过重新计算校验和来验证头块的内容,并在发生不匹配时,停止并报目录校验和错误。如果指定这个标志,tar 命令将记录错误,然后向前扫描直到查找到一个有效的头块。这就允许从多卷归档的后面的卷中恢复文件,而不需读取前面的卷。
  -L InputList :-L 选项的 Inputlist 参数应该总是一个文件名称,该名称列出需要归档的文件和目录。
  同样地,InputList 参数可以是一个保存某文件名称的变量,该文件列出要归档的文件和目录。
  这个选项帮助将列在 InputList 参数中的文件和目录写入归档。 InputList 参数中的目录不被递归。对于包含于 InputList 参数中的目录,tar 命令只将目录写入归档,而不将目录中的文件和子目录写入归档。
  如果额外的文件和目录在命令行中跟在 InputList 参数后,InputList 参数的内容归档在这些文件和目录之后。这些额外的文件或目录按它们的缺省行为归档,即将它们递归地归档。
  -l 对于每个带有链接数大于 1 的文件,而其相应的链接却未归档,写错误消息到标准输出。例如,如果 file1 和 file2 是用硬链接链接在一起,而只有 file1 存放在归档中,则 -l 标志将发出错误消息。如果未指定 -l 标志,将不显示错误消息。
  -m 使用抽取时间作为修改时间。缺省是保留文件的修改时间。
  -N Blocks 当 tar 命令处理流式磁带归档时,允许它使用很大的块的簇。然而请注意,在输入时,如果用这个标志创建了非常长的块大小, tar 命令将不能自动确定磁带的块大小。没有 -N Blocks 标志时,tar 命令可以自动确定的最大块大小为 20 块。
  -o 提供与旧版本(非 AIX)tar 命令的向下兼容。当使用这个标志进行读取时,被抽取的文件使用运行程序的用户的用户标识和组标识(UID 和 GID),而不是归档中的用户标识和组标识。这是对于普通用户的缺省行为。
  -p 恢复字段到它们的原始方式,忽略现有的用户权限屏蔽位(umask)。 setuid、setgid 和 tacky 位许可权也恢复给拥有 root 用户权限的用户。这个标志恢复文件到其原始方式,但不恢复目录到其原始方式。
  -s 如果 tar 命令未能使用 -s 标志成功尝试链接(常规链接)两个文件,请试着创建符号链接。
  -SBlocksb, -S Feet, -S Feet@density 指定每卷中的 512KB 块的数目(第一种格式),不依赖于磁带分块因子。您也可以使用第二种格式,用英尺来指定磁带大小,在这种情况下,tar 命令假定一个缺省的 Density 变量。第三种格式允许您指定磁带长度和密度。英尺被保守地假定为 11 英寸长。这个标志让您更容易处理多卷磁带归档,这时 tar 命令必须能够确定每卷能放入多少块。
  注:
  1. 磁带机在密度能力上有差异。Density 变量计算系统在磁带上可放入的数据量。
  2. 如果使用 1/4 英寸磁带设备,在指定 Feet 变量的值时,一定要考虑磁带设备上的磁道数目。例如,可以使用 -S Feet@density 标志来指定一个有 600 英尺磁带和 8000 字节/英寸密度的 4 磁道、1/4 英寸磁带机,如下:
  -S 2400@8000
  这里,600 英尺乘以 4 磁道等于 2400 英尺。
  -v 在处理每个文件时,列出它们的名称。使用 -t 标志,-v 给出磁带条目的更多信息,包括文件大小、上次修改的时间、用户标识(UID)、组标识(GID)和许可权。
  -w 显示要进行的操作,跟着是文件名,然后等候用户确认。如果回答是肯定的,则执行操作。如果回答不是肯定的,则忽略文件。
  -Number 使用 /dev/rmtNumber 文件,而不是缺省值。例如,-2 标志和 -f/dev/rmt2 文件是相同的。
  退出状态
  该命令返回下列退出值:
  0 成功完成。
  >0 有错误发生。
  示例
  1. 要将 file1 和 file2 文件写到缺省磁带机上新的归档中,请输入:
  tar -c file1 file2
  2. 要从 /dev/rmt2 磁带设备上的归档文件中抽取 /tmp 目录里的全部文件,并以抽取时间作为修改时间,请输入:
  tar -xm -f/dev/rmt2 /tmp
  3. 要新建一个包含 file1 文件的归档文件,并传递归档文件到 dd 命令,使之被写到 /dev/rmt1 设备,请输入:
  tar -cvf - file1 | dd of=/dev/rmt1 conv=sync
  4. 要显示当前目录上 out.tar 磁盘归档文件中各文件的名称,请输入:
  tar -vtf out.tar
  5. 要扩展压缩了的 tar 归档文件,fil.tar.z, 传递文件到 tar 命令,并从扩展了的 tar 归档文件中抽取全部文件,请输入:
  zcat fil.tar.Z | tar -xvf -
  6. 要使用简短相对路径名称归档 /usr/include 和 /usr/bin 文件的内容,请输入:
  cd /usr
  tar -cvf/dev/rmt0 -C./include . -C ../bin .
  注:
  当用相对路径名称指定 -C 标志的多个实例,用户必须考虑到先前的 -C 标志请求。
  7. 要在使用 -S 标志时归档到一个 8 毫米设备,请输入:
  tar -cvf /dev/rmt0 -S 4800000b /usr
  注:
  当归档到 8 毫米设备, 不推荐用 -S Feet 和 -S Feet@density 标志,因为 8 毫米设备在写入磁带时不使用密度概念。
  8. 要归档所有 C 文件的一个列表(这些文件通过 -L 选项的 InputList 参数被列在文件中),请输入:
  tar -cvf fl.tar -L fl_list
  这里,fl_list 是一个文件,它包含一个所有 .c 文件的列表。这可以通过以下命令获得:
  ls *.c > fl_list
  9. 要使用 -L 选项设置变量来归档所有 C 文件的一个列表,请输入:
  ls *.c > fl_list
  fl=fl_list
  tar -cvf var.tar -L $fl
  文件
  /dev/rmt0 指定缺省磁带设备。
  /bin/tar 指定 tar 命令的符号链接。
  /usr/bin/tar 包含 tar 命令。
  /tmp/tar* 指定临时文件。
  =====================
  tar 是linux下的一种打包程序,也可以说是一种压缩格式。
  linux下的压缩格式有.gz、.tar.gz、tgz、bz2、.Z、.tar等,tar是其中的一种。
  在说linux的压缩文件之前呢,首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录什么的变成一个总的文件,压缩则是将一个大的文件通过一些压缩算法变成一个小文件。为什么要区分这两个概念呢?其实这源于Linux中的很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你就得先借助另它的工具将这一大堆文件先打成一个包,然后再就原来的压缩程序进行压缩。
  Linux下最常用的打包程序就是tar了,使用tar程序打出来的包我们常称为tar包,tar包文件的命令通常都是以.tar结尾的。生成tar包后,就可以用其它的程序来进行压缩了,所以首先就来讲讲tar命令的基本用法:
  tar命令的选项有很多(用man tar可以查看到),但常用的就那么几个选项,下面来举例说明一下:
  # 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 -xf all.tar
  这条命令是解出all.tar包中所有文件,-x是解开的意思
  以上就是tar的最基本的用法。为了方便用户在打包解包的同时可以压缩或解压文件,tar提供了一种特殊的功能。这就是tar可以在打包或解包的同时调用其它的压缩程序,比如调用gzip、bzip2等。
  1) tar调用gzip
  gzip是GNU组织开发的一个压缩程序,.gz结尾的文件就是gzip压缩的结果。与gzip相对的解压程序是gunzip。tar中使用-z这个参数来调用gzip。下面来举例说明一下:
  # tar -czf all.tar.gz *.jpg
  这条命令是将所有.jpg的文件打成一个tar包,并且将其用gzip压缩,生成一个gzip压缩过的包,包名为all.tar.gz
  # tar -xzf all.tar.gz
  这条命令是将上面产生的包解开。
  2) tar调用bzip2
  bzip2是一个压缩能力更强的压缩程序,.bz2结尾的文件就是bzip2压缩的结果。与bzip2相对的解压程序是bunzip2。tar中使用-j这个参数来调用gzip。下面来举例说明一下:
  # tar -cjf all.tar.bz2 *.jpg
  这条命令是将所有.jpg的文件打成一个tar包,并且将其用bzip2压缩,生成一个bzip2压缩过的包,包名为all.tar.bz2
  # tar -xjf all.tar.bz2
  这条命令是将上面产生的包解开。
  3)tar调用compress
  compress也是一个压缩程序,但是好象使用compress的人不如gzip和 bzip2的人多。.Z结尾的文件就是bzip2压缩的结果。与compress相对的解压程序是uncompress。tar中使用-Z这个参数来调用gzip。下面来举例说明一下:
  # tar -cZf all.tar.Z *.jpg
  这条命令是将所有.jpg的文件打成一个tar包,并且将其用compress压缩,生成一个uncompress压缩过的包,包名为all.tar.Z
  # tar -xZf all.tar.Z
  这条命令是将上面产生的包解开
  有了上面的知识,你应该可以解开多种压缩文件了,下面对于tar系列的压缩文件作一个小结:
  1)对于.tar结尾的文件
  tar -xf all.tar
  2)对于.gz结尾的文件
  gzip -d all.gz
  gunzip all.gz
  3)对于.tgz或.tar.gz结尾的文件
  tar -xzf all.tar.gz
  tar -xzf all.tgz
  4)对于.bz2结尾的文件
  bzip2 -d all.bz2
  bunzip2 all.bz2
  5)对于tar.bz2结尾的文件
  tar -xjf all.tar.bz2
  6)对于.Z结尾的文件
  uncompress all.Z
  7)对于.tar.Z结尾的文件
  tar -xZf all.tar.z
  另外对于Window下的常见压缩文件.zip和.rar,Linux也有相应的方法来解压它们:
  1)对于.zip
  linux下提供了zip和unzip程序,zip是压缩程序,unzip是解压程序。它们的参数选项很多,这里只做简单介绍,依旧举例说明一下其用法:
  # zip all.zip *.jpg
  这条命令是将所有.jpg的文件压缩成一个zip包
  # unzip all.zip
  这条命令是将all.zip中的所有文件解压出来
  2)对于.rar
  要在linux下处理.rar文件,需要安装RAR for Linux,可以从网上下载,但要记住,RAR for Linux
  不是免费的;然后安装:
  # tar -xzpvf rarlinux-3.2.0.tar.gz
  # cd rar
  # make
  这样就安装好了,安装后就有了rar和unrar这两个程序,rar是压缩程序,unrar是解压程序。它们的参数选项很多,这里只做简单介绍,依旧举例说明一下其用法:
  # rar a all *.jpg
  这条命令是将所有.jpg的文件压缩成一个rar包,名为all.rar,该程序会将.rar 扩展名将自动附加到包名后。
  # unrar e all.rar
  这条命令是将all.rar中的所有文件解压出来
  到此为至,我们已经介绍过linux下的tar、gzip、gunzip、bzip2、 bunzip2、compress、uncompress、 zip、unzip、rar、unrar等程式,你应该已经能够使用它们对.tar、.gz、.tar.gz、.tgz、.bz2、.tar.bz2、. Z、.tar.Z、.zip、.rar这10种压缩文件进行解压了,以后应该不需要为下载了一个软件而不知道如何在Linux下解开而烦恼了。而且以上方法对于Unix也基本有效。
  总结一下,在linux下 一些压缩和解压的常用命令:
  压缩
  tar –cvf jpg.tar *.jpg //将目录里所有jpg文件打包成tar.jpg
  tar –czf jpg.tar.gz *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz
  tar –cjf jpg.tar.bz2 *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用bzip2压缩,生成一个bzip2压缩过的包,命名为jpg.tar.bz2
  tar –cZf jpg.tar.Z *.jpg //将目录里所有jpg文件打包成jpg.tar后,并且将其用compress压缩,生成一个umcompress压缩过的包,命名为jpg.tar.Z
  rar a jpg.rar *.jpg //rar格式的压缩,需要先下载rar for linux
  zip jpg.zip *.jpg //zip格式的压缩,需要先下载zip for linux
  解压
  tar –xvf file.tar //解压 tar包
  tar -xzvf file.tar.gz //解压tar.gz
  tar -xjvf file.tar.bz2 //解压 tar.bz2
  tar –xZvf file.tar.Z //解压tar.Z
  unrar e file.rar //解压rar
  unzip file.zip //解压zip

0 0
原创粉丝点击