Contents

在创建tar文件时排除文件和目录

1. 概述

tar 命令 用于在 Linux 和基于 Unix 的系统中归档文件。它以多种格式创建存档,例如*.tar、.tar.gz、.cpio、.tar.bz2、.zip、.rar等。该命令在创建 .tar.gz 文件时使用gzip 算法,在创建.tar.gz文件时使用bzip 算法创建.tar.bz2*文件。

在本教程中,我们将重点介绍在创建 . tar.gz归档文件。

2. 设置

让我们首先使用mkdir命令创建一个名为parent_directory的目录:

$ mkdir parent_directory

我们将使用此目录来托管我们将在本教程中使用的文件和目录。 接下来,让我们导航到目录:

$ cd parent_directory

然后,我们可以使用touch 命令创建三个随机文件:

$ touch file1.txt file2.txt file3.txt

最后,让我们创建三个目录:

$ mkdir folder1 folder2 folder3

运行上面的命令后,我们应该有这个目录结构:

$ ls
file1.txt  file3.txt  folder2
file2.txt  folder1    folder3

3.使用*-exclude*选项

tar –exclude选项具有以下基本语法:

$ tar --exclude="pattern" [options] [archive_name] [path]

让我们在创建*.tar.gz存档时使用–exclude*选项跳过文件或目录:

$ tar --exclude='file1.txt' -zcvf backup.tar.gz .
./
./folder3/
./file3.txt
./folder1/
./file2.txt
./folder2/
tar: .: file changed as we read it

让我们分解这个命令来理解它:

  • -z :使用gzip压缩文件和目录
  • -c : 创建一个新的归档文件
  • -v:详细列出已处理的文件和目录
  • -f:允许我们为创建的存档指定文件名
  • –exclude :创建存档时排除file1.txt文件

我们使用了“ . ” 在命令末尾作为包含我们要归档的文件的当前工作目录的路径。

排除目录时,不应在目录名末尾使用斜杠 (/)。

因为我们在包含要归档的项目的同一目录中创建backup.tar.gz文件,所以我们收到消息“文件在读取时已更改”。

由于我们使用了*-v选项,我们可以从上面的输出中看到file1.txt被跳过了。或者,我们可以使用此命令列出backup.tar.gz*文件的内容而不解压缩它:

$ tar -tf backup.tar.gz
./
./folder3/
./file3.txt
./folder1/
./file2.txt
./folder2/

我们使用*-t*选项列出存档文件的内容。

3.1. 排除多个文件和目录

我们可以通过链接多个–exclude*选项来排除多个文件或目录:*

$ tar --exclude='file1.txt' --exclude='folder1' -zcvf backup.tar.gz .
./
./folder3/
./file3.txt
./file2.txt
./folder2/
tar: .: file changed as we read it

或者,我们也可以以这种格式传入要排除的文件和目录:

$ tar --exclude={"file1.txt", "file2.txt"} -zcvf backup.tar.gz .
file3.txt
folder3
folder2
folder1

终端上的花括号有时会导致 Bash 函数出现问题。这个*–exclude*选项变体可能无法与其他系统一致地工作。

3.2. 排除具有特定扩展名的文件

我们还可以传递模式来排除特定的文件扩展名:

$ tar --exclude='*.txt' -zcvf backup.tar.gz .
./
./folder3/
./folder1/
./folder2/
tar: .: file changed as we read it

上面的命令会跳过所有扩展名为*.txt*的文件。

我们收到消息“文件在读取时已更改”,因为backup.tar.gz文件是在与要归档的项目相同的目录中创建的。

tar命令具有内置选项,允许我们忽略有时自动生成的特定文件和目录。让我们看一下其中一些选项及其执行的功能:

  • –exclude-backups:排除所有备份和锁定文件
  • –exclude-caches:排除所有带有 CACHEDIR.TAG 的目录,标签本身除外
  • –exclude-vcs:排除所有版本控制系统文件
  • –exclude-vcs-ignores:从版本控制系统中排除与特定忽略文件模式匹配的文件。例如,将跳过*.gitignore文件中列出的文件、目录和文件扩展名,以及*.gitignore文件本身

4. 使用排除文件

或者,我们可以为tar命令提供一个文件,其中包含在创建或提取存档文件时要排除的文件或目录列表。该文件称为排除文件。

让我们看看如何使用排除文件在归档时忽略特定文件和目录。

首先,让我们创建一个exclude_file.txt文件:

$ touch exclude_file.txt

然后,我们可以添加要排除的文件名或目录名列表,每个文件名或目录名用换行符分隔:

file1.txt
folder3
file2.txt

让我们使用这个exclude_file.txt来排除其中列出的项目:

$ tar -zcvf backup.tar.gz -X exclude_file.txt .
./
./folder1/
./folder2/
./exclude_file.txt
./file3.txt
tar: .: file changed as we read it

我们使用-X*选项输入排除文件*。这是编写*–exclude-from*选项的一种简短方法:

$ tar -zcvf backup.tar.gz --exclude-from="exclude_file.txt" .

** tar命令还允许我们在排除文件中包含要跳过的文件扩展名模式。**

让我们更改exclude_file.txt中的内容以匹配此内容:

*.txt

更新文件后,让我们再次尝试压缩文件:

$ tar -zcvf backup.tar.gz --exclude-from="exclude_file.txt" .
./
./folder3/
./folder2/
./folder1/

我们看到上面的命令跳过了所有扩展名为*.txt*的文件。