File tar排除文件模式
我正在尝试使用以下命令创建tar:File tar排除文件模式,file,tar,File,Tar,我正在尝试使用以下命令创建tar: tar -cvf myFile.tar -X exclude-files.txt myContentDirectory 我的排除文件有以下要排除的模式: **/*.bak **/*.db **/*.html 但是我没有看到这些文件类型被排除在我的tar之外。 我做错了什么 我发现,当我在exclude-files.txt中只有一个模式时,我们可以说只有一个模式 **/*.bak 它确实有效。但是不能使用多个文件模式(每一个都在新行上)我认为: *.bak
tar -cvf myFile.tar -X exclude-files.txt myContentDirectory
我的排除文件有以下要排除的模式:
**/*.bak
**/*.db
**/*.html
但是我没有看到这些文件类型被排除在我的tar之外。
我做错了什么
我发现,当我在exclude-files.txt中只有一个模式时,我们可以说只有一个模式
**/*.bak
它确实有效。但是不能使用多个文件模式(每一个都在新行上)我认为:
*.bak
*.db
*.html
是排除文件的正确格式如果要排除特定目录,可以执行以下操作:
some-dir/*.db
此外,您的命令应如下所示:
tar -cvf myFile.tar -X exclude-files.txt myContentDirectory
tar -cO --exclude=*.bak myContentDirectory | tar -O --delete '*.db' | tar -O --delete '*.html' | tar -tv
命令的顺序很可能不正确 tar-cvf myFile.tar-X exclude-files.txt myContentDirectory 应该是 tar cv-X exclude-files.txt-f myFile.tar myContentDirectory 另外,我还没有检查过过滤器本身。最有可能的参数顺序就是问题所在。
如果过滤器/模式中存在问题-使用--exclude选项逐个测试会更容易。如果回答有点晚,很抱歉
tar -cO --exclude=*.bak myContentDirectory | tar -O --delete '*.db' | tar -O --delete '*.html' > myFile.tar
看,您在这里所做的是创建tar,但将其发送到stdout而不是文件,然后将其传输到tar中删除您不想要的内容,一次或多次,最后将输出写入文件
您甚至可以先这样测试它:
tar -cvf myFile.tar -X exclude-files.txt myContentDirectory
tar -cO --exclude=*.bak myContentDirectory | tar -O --delete '*.db' | tar -O --delete '*.html' | tar -tv
这将弹出存档中所有剩余文件的列表。我也尝试过,但效果很好,运行命令时输出的结果是什么?刚刚编辑了我上面的问题,请查看。该命令确实运行,但排除选项仅在我的文件中只提到一种模式时才起作用。您使用的是哪种版本的tar(以及哪种操作系统)?我使用OSX版本(tar 2.8.3)测试了它,它运行良好…
--exclude
模式应始终使用单引号,例如--exclude='*.bak'
。请参阅:@thom_nic这是最佳实践,但在上述情况下,从技术上讲这不是必需的:--exclude=*.bak
。此表单需要:--排除'*.bak'
。关键是要避免外壳膨胀。