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、排除目錄時候,排除的目錄后面不能接“/”。