zoukankan      html  css  js  c++  java
  • Linux数据归档和解压缩tar,cpio,gzip,bzip,lzma,zip命令使用

    转载:http://www.1987.name/659.html

    数据压缩归档和备份是系统管理的日常工作,定期备份不可小视,归档和压缩对于系统管理员或是普通用户来说都经常用到的操作,有很多中压缩格式,需要结合不同的使用方法才能达到最佳的压缩效果。

    使用tar归档

    tar命令可以用来归档文件,用它可以将多个文件保存为单个文件,同时保留所有文件的属性,比如所有者、权限等。

    常用选项

    • -a自动判断压缩格式
    • -c建立一个压缩文件的参数指令。
    • -x解开一个压缩文件的参数指令。
    • -t查看tarfile里面的文件。
    • -r向归档文件中追加文件。
    • -d比较归档文件与文件系统的内容。
    • -u通过检查时间戳来更新归档文件中的内容。
    • -z调用gzip来压缩归档文件,与-x联用时调用gzip完成解压缩。
    • -j调用bzip2来压缩归档文件。
    • -v解压缩的过程中显示文件。
    • -f使用归档名,归档名必须紧跟在-f之后。
    • -p使用原文件的原来属性(属性不会依据使用者而变)。
    • -P可以使用绝对路径来压缩。
    • -N yyyy/mm/dd比日期yyyy/mm/dd还要新的才会被归档。
    • -C指定需要将文件提取到哪个目录。
    • -A合并多个归档文件。
    • -X排除文件列表中的文件名。
    • --exclude FILE排除FILE。
    • --exclude-vcs排除版本控制系统目录。

    常见用法

    -c选项创建归档文件,-f是指定归档文件名:

    tar -cf test.tar f1 f2 f3 f4 f5...

    使用-r追加选项向归档文件中追加文件:

    tar -rvf test.tar new_file

    使用-t查看归档文件里面的内容:

    tar -tf test.tar

    使用-v或者-vv可以显示详细的内容信息:

    tar -tvvf inotify-tools-3.14.tar.gz
    drwxrwxrwx 1000/1000         0 2010-03-14 21:53:46 inotify-tools-3.14/
    -rw-r--r-- 1000/1000        39 2010-03-12 21:53:47 inotify-tools-3.14/AUTHORS
    ...
    -rwxr-xr-x 1000/1000     18615 2010-03-12 21:53:47 inotify-tools-3.14/depcomp

    使用-x将归档文件提取出来:

    tar -xf test.tar

    使用-C指定需要将文件提取到/data/test下:

    tar -xf test.tar -C /data/test
    

    在归档文件中提取指定的文件:

    tar -xvf test.tar file1 file5
    

    在tar中使用stdin和stdout

    在归档时,可以将stdout指定为输出文件,这样另一个命令就可以通过管道符将它作为stdin,并进行其他处理:

    tar -cf - file1 file2 file3 | tar -xvf - -C /data/test
    

    拼接两个归档文件

    使用-A选项拼接两个归档文件,拼接后的文件名是test1.tar:

    tar -Af test1.tar tet2.tar
    

    通过时间戳来更新归档文件中的内容,使用-u选项指明只有比归档文件中的同名文件更新的时候才进行添加:

    tar -uvvf 1.tar ddd
    -rw-r--r-- root/root         4 2013-01-05 14:46:36 ddd
    

    使用-d来比较归档文件和文件系统中的差别:

    tar -df 1.tar aaa
    aaa: Mod time differs
    aaa: Size differs
    aaa: Mod time differs
    aaa: Size differs
    

    使用--delete从归档文件中删除文件:

    tar -f test.tar --delete file1 file2...
    

    通过--exclude从归档文件中排除部分文件

    tar -cf test.tar * --exclude "*.jpg"
    

    将需要排除的文件写入列表文件同时配合-X选项排除它们:

    cat list
    file1
    file2
    
    tar -cf test.tar * -X list
    

    这样是排除了file1和file2两个文件。

    排除版本控制系统目录

    通常使用tar归档文件来分发源码,大多数源码都是使用版本控制系统进行维护,常见的有subversion、git、mercurial、cvs等,版本控制系统中的代码目录包含用来管理版本的特殊目录,比如.svn、.git。为了在归档时排除这些目录,可以使用tar命令的--exclude-vcs选项排除它们。

    tar --exclude-vcs -czvvf source_code.tar.gz svn_dir
    

    打印归档后文件总字节数

    tar -cf 3.tar * --totals
    Total bytes written: 40960 (40KiB, 21MiB/s)
    

    压缩归档文件

    归档文件通常被压缩成以下格式之一:

    • file.tar.gz  (-z选项指定gzip格式)
    • file.tar.bz2 (-j选项指定bunzip2格式)
    • file.tar.lzma (--lzma指定lzma格式)

    使用cpio归档

    cpio是类似于tar的归档格式,也可以保留文件属性,一般用于RPM软件包、Linux内核initramfs文件。cpio是以绝对路径进行归档,进行提取时cpio会使用绝对路径提取内容,不像tar那样会去除路径开头/转换为相对路径,常用的选项有:

    • -o指定输出。
    • -v打印归档文件列表。
    • -i指定输出。
    • -t列出归档文件中的内容。
    • -d提取归档文件内容。

    cpio是用过stdin获取输入文件名,后将归档文件写入stdout,需要将stdout重定向到一个文件来接受cpio的输出:

    echo file1 file2 file3 | cpio -ov > test.cpio
    

    列出cpio归档文件中的内容:

    cpio -it < test.cpio
    

    从cpio归档文件中提取文件:

    cpio -id < test.cpio
    

    cpio在覆盖文件时候不会显示提示信息,会直接覆盖。

    使用gunzip或gzip解压缩

    gzip是Linux下常用的压缩格式,gzip、gunzip、zcat都可以处理gzip格式压缩文件。gzip只能够压缩单个文件,不能压缩多个文件。gzip在压缩时候会删除原文件,并生成一个压缩后的.gz文件。

    使用gzip命令压缩文件filename:

    gzip test.txt
    ls
    test.txt.gz
    

    列出压缩文件的属性信息:

    gzip -l test.txt.gz
             compressed        uncompressed  ratio uncompressed_name
                     34                  53 101.9% test.txt
    

    使用gunzip解压.gz文件:

    gunzip test.txt.gz
    ls
    test.txt
    

    从stdin读取并写入到stdout:

    cat filename | gzip -c > file.gz
    

    结合tar压缩归档文件,-a是根据文件扩展名自动判断压缩格式:

    tar -czvf test.tar.gz *
    tar -cavf test.tar.gz *
    

    使用zcat命令直接读取gzip格式文件:

    zcat test.txt.gz
    this is a test line
    

    gzip可以指定压缩率,一共有9个级别:

    • 1级的压缩率最低,压缩速度最快。
    • 9级的压缩率最高,压缩速度最慢。
    gzip -9 test.jpg
    

    使用bunzip或bzip解压缩

    bunzip2是另一种与gzip类似的压缩技术,能够生成比gzip跟小(压缩比更高)的文件。压缩后会生成一个.bz2文件。也会删除原文件生成新文件。压缩率和gzip相同。

    使用bzip2进行压缩:

    bzip2 filename
    ls
    filename.bz2
    

    解压bzip2文件:

    bunzip2 filename.bz2
    

    结合tar压缩归档文件:

    tar -cjvf test.tar.bz2 *
    tar -cavf test.tar.bz2 *
    

    使用lzma压缩

    lzma是一个交新的压缩工具,比gzip和bzip2有更好的压缩率,不过大多数Linux发行版没有安装,需要自行安装。使用方法基本和gzip、bzip2一样。

    用lzma压缩文件:

    lzma filename
    或者加上压缩等级,这样生成的压缩包更小
    lzma -9 filename
    上面的这种压缩方法默认会删除filename文件,如果想保留原始文件可以加上-k,如下
    lzma -k -9 filename
    ls filename.lzma

    上面的这些的方法只能压缩文件,无法压缩文件夹,可以先用tar将文件夹打包,然后再用lzma进行压缩即可

    tar  -cf  dir.tar dir

    lzma -9 dir.tar

    会生成文件 dir.tar.lzma

    如果要解压,可以使用tar一次性完成  tar -xf dir.tar.lzma --lzma -C ./

    用unlzma加压文件

    unlzma filename.lzma

    结合tar压缩归档文件

    tar -cvf --lzma test.tar.lzma *
    tar -cavf test.tar.lzma *

    用zip归档和压缩

    ZIP是种流行的压缩格式,很多平台都可以使用。压缩后会另外生成.zip扩展名的压缩文件。

    压缩

    命令选项

    • -A 调整可执行的自动解压缩文件。
    • -b<工作目录> 指定暂时存放文件的目录。
    • -c 替每个被压缩的文件加上注释。
    • -d 从压缩文件内删除指定的文件。
    • -D 压缩文件内不建立目录名称。
    • -f 此参数的效果和指定"-u"参数类似,但不仅更新既有文件,如果某些文件原本不存在于压缩文件内,使用本参数会一并将其加入压缩文件中。
    • -F 尝试修复已损坏的压缩文件。
    • -g 将文件压缩后附加在既有的压缩文件之后,而非另行建立新的压缩文件。
    • -i<范本样式> 只压缩符合条件的文件。
    • -j 只保存文件名称及其内容,而不存放任何目录名称。
    • -J 删除压缩文件前面不必要的数据。
    • -k 使用MS-DOS兼容格式的文件名称。
    • -l 压缩文件时,把LF字符置换成LF+CR字符。
    • -ll 压缩文件时,把LF+CR字符置换成LF字符。
    • -L 显示版权信息。
    • -m 将文件压缩并加入压缩文件后,删除原始文件,即把文件移到压缩文件中。
    • -n<字尾字符串> 不压缩具有特定字尾字符串的文件。
    • -o 以压缩文件内拥有最新更改时间的文件为准,将压缩文件的更改时间设成和该文件相同。
    • -q 不显示指令执行过程。
    • -r 递归处理,将指定目录下的所有文件和子目录一并处理。
    • -S 包含系统和隐藏文件。
    • -t<日期时间> 把压缩文件的日期设成指定的日期。
    • -T 检查备份文件内的每个文件是否正确无误。
    • -u 更换较新的文件到压缩文件内。
    • -v 显示指令执行过程或显示版本信息。
    • -V 保存VMS操作系统的文件属性。
    • -w 在文件名称里假如版本编号,本参数仅在VMS操作系统下有效。
    • -x<范本样式> 压缩时排除符合条件的文件。
    • -X 不保存额外的文件属性。
    • -y 直接保存符号连接,而非该连接所指向的文件,本参数仅在UNIX之类的系统下有效。
    • -z 替压缩文件加上注释。
    • -$ 保存第一个被压缩文件所在磁盘的卷册名称。
    • -<压缩效率> 压缩效率是一个介于1-9的数值。

    常见用法

    对文件采用zip格式进行压缩:

    zip file.zip file
    

    -r选项对目录和我呢见进行递归操作:

    zip -r test.zip dir file...
    

    -u选项更新压缩文件中的内容:

    zip file.zip -u new_file
    

    从压缩文件中删除内容:

    zip -d file.zip file.txt
    

    解压

    使用unzip命令解压缩zip文件。

    命令选项

    • -c 将解压缩的结果显示到屏幕上,并对字符做适当的转换。
    • -f 更新现有的文件。
    • -l 显示压缩文件内所包含的文件。
    • -p 与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换。
    • -t 检查压缩文件是否正确。
    • -u 与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中。
    • -v 执行是时显示详细的信息。
    • -z 仅显示压缩文件的备注文字。
    • -a 对文本文件进行必要的字符转换。
    • -b 不要对文本文件进行字符转换。
    • -C 压缩文件中的文件名称区分大小写。
    • -j 不处理压缩文件中原有的目录路径。
    • -L 将压缩文件中的全部文件名改为小写。
    • -M 将输出结果送到more程序处理。
    • -n 解压缩时不要覆盖原有的文件。
    • -o 不必先询问用户,unzip执行后覆盖原有文件。
    • -P<密码> 使用zip的密码选项。
    • -q 执行时不显示任何信息。
    • -s 将文件名中的空白字符转换为底线字符。
    • -V 保留VMS的文件版本信息。
    • -X 解压缩时同时回存文件原来的UID/GID。
    • -d<目录> 指定文件解压缩后所要存储的目录。
    • -x<文件> 指定不要处理.zip压缩文件中的哪些文件。

    常见用法

    要从zip文件中提取内容:

    unzip file.zip

    列出压缩文件中的内容:

    unzip -l test.zip

    验证压缩文件是否完整:

    unzip -t test.zip
  • 相关阅读:
    Interview with BOA
    Java Main Differences between HashMap HashTable and ConcurrentHashMap
    Java Main Differences between Java and C++
    LeetCode 33. Search in Rotated Sorted Array
    LeetCode 154. Find Minimum in Rotated Sorted Array II
    LeetCode 153. Find Minimum in Rotated Sorted Array
    LeetCode 75. Sort Colors
    LeetCode 31. Next Permutation
    LeetCode 60. Permutation Sequence
    LeetCode 216. Combination Sum III
  • 原文地址:https://www.cnblogs.com/pengdonglin137/p/3489969.html
Copyright © 2011-2022 走看看