如何在使用tar命令时排除一组文件和文件夹?

13 浏览
0 Comments

如何在使用tar命令时排除一组文件和文件夹?

有没有一种简单的shell命令/脚本来支持从备份中排除某些文件/文件夹?

我有一个需要备份的目录,其中包含一个具有许多非必要备份的非常大的文件的子目录。

不太完美的解决方案:

tar --exclude=PATTERN命令匹配给定的模式并排除那些文件,但我需要忽略特定的文件和文件夹(完整的文件路径),否则可能会排除有效的文件。

我也可以使用find命令创建一个文件列表,并排除我不想备份的文件,并将该列表传递给tar,但这仅适用于少量的文件。我有成千上万的文件。

我开始认为唯一的解决方案是创建一个包含要排除的文件/文件夹列表的文件,然后使用rsync将所有文件复制到tmp目录,并使用tar归档该目录。

请问有没有更好/更高效的解决方案?

编辑:Charles Ma的解决方案效果很好。大的注意点是--exclude=\'./folder\' 必须放在tar命令的开头。完整命令(首先cd,因此备份相对于该目录):

cd /folder_to_backup
tar --exclude='./folder' --exclude='./upload/folder2' -zcvf /backup/filename.tgz .

admin 更改状态以发布 2023年5月22日
0
0 Comments

你可以使用--exclude来在tar中排除目录。

如果你想压缩所有文件,除了/usr目录,你可以使用:

tar -zcvf /all.tgz / --exclude=/usr

在你的情况下,可能需要做些类似于以下操作:

tar -zcvf archive.tgz arc_dir --exclude=dir/ignore_this_dir

0
0 Comments

您可以有多个tar的排除选项,因此

$ tar --exclude='./folder' --exclude='./upload/folder2' -zcvf /backup/filename.tgz .

等等将会起作用。确保在源和目的地项目之前放置--exclude

0