tar命令中--exclude参数详解

tar命令中--exclude参数详解

测试环境:
[root@osker /]# uname -r
3.10.0-957.el7.x86_64
[root@osker /]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
[root@osker /]# tree test
test
├── t1
│   ├── file1.txt
│   ├── file2.txt
│   └── file3.txt
├── t2
│   ├── file1.txt
│   ├── file2.txt
│   └── file3.txt
└── t3
    ├── file1.txt
    ├── file2.txt
    └── file3.txt
3 directories, 9 files

打包/test目录下的文件,排除所有文件名为file1.txt的文件
1、--exclude后跟”=“,排除正常。
[root@osker /]# tar -czvf ces.tar.gz /test --exclude=file1.txt     
tar: Removing leading `/' from member names
/test/
/test/t1/
/test/t1/file2.txt
/test/t1/file3.txt
/test/t2/
/test/t2/file2.txt
/test/t2/file3.txt
/test/t3/
/test/t3/file2.txt
/test/t3/file3.txt
2、--exclude后跟空格,排除正常。
[root@osker /]# tar -czvf ces.tar.gz /test --exclude file1.txt
tar: Removing leading `/' from member names
/test/
/test/t1/
/test/t1/file2.txt
/test/t1/file3.txt
/test/t2/
/test/t2/file2.txt
/test/t2/file3.txt
/test/t3/
/test/t3/file2.txt
/test/t3/file3.txt

打包/test目录下的文件,排除/test/t1/file1.txt的文件
1、--exclude后跟”=“,排除正常。
[root@osker /]# tar -czvf ces.tar.gz /test --exclude=/test/t1/file1.txt
tar: Removing leading `/' from member names
/test/
/test/t1/
/test/t1/file2.txt
/test/t1/file3.txt
/test/t2/
/test/t2/file1.txt
/test/t2/file2.txt
/test/t2/file3.txt
/test/t3/
/test/t3/file1.txt
/test/t3/file2.txt
/test/t3/file3.txt
2、--exclude后跟空格,排除正常。
[root@osker /]# tar -czvf ces.tar.gz /test --exclude /test/t1/file1.txt
tar: Removing leading `/' from member names
/test/
/test/t1/
/test/t1/file2.txt
/test/t1/file3.txt
/test/t2/
/test/t2/file1.txt
/test/t2/file2.txt
/test/t2/file3.txt
/test/t3/
/test/t3/file1.txt
/test/t3/file2.txt
/test/t3/file3.txt
3、打包目录为绝对路径,排除文件为相对路径时候,排除文件成功。
[root@osker /]# tar -czvf ces.tar.gz /test --exclude test/t1/file1.txt
tar: Removing leading `/' from member names
/test/
/test/t1/
/test/t1/file2.txt
/test/t1/file3.txt
/test/t2/
/test/t2/file1.txt
/test/t2/file2.txt
/test/t2/file3.txt
/test/t3/
/test/t3/file1.txt
/test/t3/file2.txt
/test/t3/file3.txt
4、打包目录为相对路径,排除文件为绝对路径时候,排除文件失败。
[root@osker /]# tar -czvf ces.tar.gz test --exclude /test/t1/file1.txt
test/
test/t1/
test/t1/file1.txt
test/t1/file2.txt
test/t1/file3.txt
test/t2/
test/t2/file1.txt
test/t2/file2.txt
test/t2/file3.txt
test/t3/
test/t3/file1.txt
test/t3/file2.txt
test/t3/file3.txt
5、打包目录和排除文件为相对路径的时候,排除文件正常。
[root@osker /]# tar -czvf ces.tar.gz test --exclude test/t1/file1.txt
test/
test/t1/
test/t1/file2.txt
test/t1/file3.txt
test/t2/
test/t2/file1.txt
test/t2/file2.txt
test/t2/file3.txt
test/t3/
test/t3/file1.txt
test/t3/file2.txt
test/t3/file3.txt

使用--exclude-from排除文件方法,将要排除的文件路径写入到一个文件中。适合有多个文件需要排除的情况
[root@osker /]# echo "/test/t2/file2.txt" > /exclude.txt
1、打包目录和排除文件以及排除文件里的路径为绝对路径的时候,排除文件正常。
[root@osker /]# tar -czvf ces.tar.gz /test --exclude-from /exclude.txt
tar: Removing leading `/' from member names
/test/
/test/t1/
/test/t1/file1.txt
/test/t1/file2.txt
/test/t1/file3.txt
/test/t2/
/test/t2/file1.txt
/test/t2/file3.txt
/test/t3/
/test/t3/file1.txt
/test/t3/file2.txt
/test/t3/file3.txt
2、打包目录为绝对路径,排除文件为相对路径,排除文件内容为绝对路径的时候,排除文件正常。
[root@osker /]# tar -czvf ces.tar.gz /test --exclude-from exclude.txt
tar: Removing leading `/' from member names
/test/
/test/t1/
/test/t1/file1.txt
/test/t1/file2.txt
/test/t1/file3.txt
/test/t2/
/test/t2/file1.txt
/test/t2/file3.txt
/test/t3/
/test/t3/file1.txt
/test/t3/file2.txt
/test/t3/file3.txt
3、打包目录为相对路径,排除文件和排除文件内容为绝对路径的时候,排除文件失败。
[root@osker /]# tar -czvf ces.tar.gz test --exclude-from /exclude.txt
test/
test/t1/
test/t1/file1.txt
test/t1/file2.txt
test/t1/file3.txt
test/t2/
test/t2/file1.txt
test/t2/file2.txt
test/t2/file3.txt
test/t3/
test/t3/file1.txt
test/t3/file2.txt
test/t3/file3.txt
4、打包目录和排除文件为相对路径,排除文件内容为绝对路径的时候,排除文件失败。
[root@osker /]# tar -czvf ces.tar.gz test --exclude-from exclude.txt
test/
test/t1/
test/t1/file1.txt
test/t1/file2.txt
test/t1/file3.txt
test/t2/
test/t2/file1.txt
test/t2/file2.txt
test/t2/file3.txt
test/t3/
test/t3/file1.txt
test/t3/file2.txt
test/t3/file3.txt
5、排除文件内容为相对路径的时候,打包目录和排除文件为相对路径或者绝对路径,排除文件成功。
[root@osker /]# echo "test/t2/file2.txt" > exclude.txt
[root@osker /]# tar -czvf ces.tar.gz test --exclude-from exclude.txt
test/
test/t1/
test/t1/file1.txt
test/t1/file2.txt
test/t1/file3.txt
test/t2/
test/t2/file1.txt
test/t2/file3.txt
test/t3/
test/t3/file1.txt
test/t3/file2.txt
test/t3/file3.txt
[root@osker /]# tar -czvf ces.tar.gz test --exclude-from /exclude.txt
test/
test/t1/
test/t1/file1.txt
test/t1/file2.txt
test/t1/file3.txt
test/t2/
test/t2/file1.txt
test/t2/file3.txt
test/t3/
test/t3/file1.txt
test/t3/file2.txt
test/t3/file3.txt
[root@osker /]# tar -czvf ces.tar.gz /test --exclude-from /exclude.txt
tar: Removing leading `/' from member names
/test/
/test/t1/
/test/t1/file1.txt
/test/t1/file2.txt
/test/t1/file3.txt
/test/t2/
/test/t2/file1.txt
/test/t2/file3.txt
/test/t3/
/test/t3/file1.txt
/test/t3/file2.txt
/test/t3/file3.txt
[root@osker /]# tar -czvf ces.tar.gz /test --exclude-from exclude.txt
tar: Removing leading `/' from member names
/test/
/test/t1/
/test/t1/file1.txt
/test/t1/file2.txt
/test/t1/file3.txt
/test/t2/
/test/t2/file1.txt
/test/t2/file3.txt
/test/t3/
/test/t3/file1.txt
/test/t3/file2.txt
/test/t3/file3.txt

排除目录
排除目录后不接“/”,排除目录成功。
[root@osker /]# tar -czvf ces.tar.gz /test --exclude=/test/t1
tar: Removing leading `/' from member names
/test/
/test/t2/
/test/t2/file1.txt
/test/t2/file2.txt
/test/t2/file3.txt
/test/t3/
/test/t3/file1.txt
/test/t3/file2.txt
/test/t3/file3.txt
排除目录后接“/”,排除目录失败。
[root@osker /]# tar -czvf ces.tar.gz /test --exclude=/test/t1/
tar: Removing leading `/' from member names
/test/
/test/t1/
/test/t1/file1.txt
/test/t1/file2.txt
/test/t1/file3.txt
/test/t2/
/test/t2/file1.txt
/test/t2/file2.txt
/test/t2/file3.txt
/test/t3/
/test/t3/file1.txt
/test/t3/file2.txt
/test/t3/file3.txt

总结:
1、tar命令下的--exclude后面可以跟”=“或者空格,效果一样。
2、tar命令下的--exclude后面跟文件名,会排除所有和此名相同的文件。
3、tar命令下的--exclude后面跟排除文件的路径为绝对路径的时候,打包路径也必须为绝对路径。
4、tar命令下的--exclude后面跟排除文件的路径为相对路径的时候,打包路径为相对或者绝对路径都可以。
5、tar命令下的--exclude-from后面排除文件里的路径为绝对路径的时候,打包路径也必须为绝对路径。
6、tar命令下的--exclude-from后面排除文件里的路径为相对路径的时候,打包路径为相对或者绝对路径都可以。
7、排除目录时候,排除的目录后面不能接“/”。

原文地址:https://www.cnblogs.com/osker/p/12427447.html