Linux tar 命令

2017-03-13|Categories: External cmd, Linux|

备注:这是我在Linux世界的第一篇学习笔记,颇有纪念意义。——2017-03-13

基本用法

1. 创建归档文件

  • tar cf example.tar file_1 file_2 file_n
    • -c = --creat
    • -f = --file=example.tar
      • 多个参数合并输入时,比如 tar czpvf example.tar.gz /etcf必须放在最后,紧接着输入文件名,如果f之后还有其它参数,比如tar czpfv example.tar.gz /etc,最终的文件名就是「v」,而不是「example.tar.gz」

把命令选项翻译成日常用语:cf = create a file called example.tar = 创建一个名为 example.tar 的归档文件。

2. 创建并压缩归档文件

在 Linux 系统上,归档和压缩是两个不同的工作,归档的文件可以被压缩,也可以不压缩,这一点与 Windows 系统不同。Windows 常见的归档方式是通过 7zip/WinRAR 这类压缩解压软件把一系列文件压缩成单个文件,归档和压缩其实是同一件事。

  • tar czf example.tar.gz file_1 file_2 file_n
    • -z = --gzip
  • tar cjf example.tar.bz2 file_1 file_2 file_n
    • -j = --bzip2

把命令选项翻译成日常用语:czf = create a gzipped file called example.tar.gz = 创建一个 gzip 压缩的、名为 example.tar.gz 的归档文件。

3. 列出归档文件内容

  • tar tf example.tar
    • -t = --list

4. 提取归档文件内容

  • tar xf example.tar
    • -x = --extract
  • tar xzf example.tar.gz
  • tar xjf example.tar.bz2

tar命令可以自动识别文件的压缩方式,因此可以不用指定zj选项。

5. 模式与选项

tar 命令的参数有「模式」和「选项」的分别,「模式」参数必须写在「选项」参数前面。

参数 模式 选项
-c yes
-t yes
-x yes
-f yes
-j yes
-z yes

根据搜索结果打包

  • find . -iname 'file-a' | tar czf example.tar.gz --files-from=-
    • --files-from= 也可以简写成 -T,在 -c 模式下表示「根据指定的文件创建归档文件」。
    • 末尾的减号 - 非常重要,也很常见,用来表示标准输入/输出,在这里具体指 find 命令查找到的文件清单。

题外话:Man pages中的搜索技巧

如何查找一个命令的某个指定选项的用法,比如:tar -T

  1. man tar
  2. /^ *-T:
    • / 表示「开始查找」,和Vim里一样
    • ^ 是正则表达式元字符,表示「从每一行的行首开始匹配」
    • 第三个字符是「空格」
    • * 表示前面的「空格」出现0次或多次
    • -T 是需要查找的选项

这个方法有局限,只有选项或参数位于一行的行首才有效,像 tar --files-from 这个选项就查不到,因为它所在的行是这样的:-T, --files-from=FILE

只打包目录下的文件,不包括目录本身 2018-01-16

通过-C /src_dir .选项指定源目录,然后用圆点.表示该目录下所有文件,但不包括目录本身:

# use `tar -cf test.tar.gz -C src_dir .` to contain all files
# under `src_dir` but the directory itself in the archive,
# note there is a dot at the end of the line.
#
tar -czf backup_etc.tar.gz -C /etc .

打包完毕删除源文件和目录 2018-01-16

--remove-files将在打包完成之后删除源文件和目录,如果目录不为空,则不会被删除,相应的会报错:

# `--remove-files` will also try to `rmdir` directory itself after deleting all files
tar --remove-files -czf test.tar.gz /test

Leave A Comment