有时候我们压缩文件时,不希望把该文件下的某个文件夹或文件压缩进去,我们可以使用tar --exclude命令。可是该命令文件夹路径写法需要特别注意,明明加了--exclude,可是还是把不想压缩的压缩进去了。
1、我们以一个文件夹为例,如下结构
[pc@localhost tar_test]$ ls -a
. .. 1.txt 2.txt 3.txt 4.txt .svn
[pc@localhost tar_test]$ ls -a .svn/
. .. 5.txt
2、压缩文件夹tar_test里除了.svn文件夹里所有文件
--第一种写法 tar -cvf tar_test.tar.bz2 tar_test --exclude=tar_test/.svn/
[pc@localhost ~]$ tar -cvf tar_test.tar.bz2 tar_test --exclude=tar_test/.svn/
tar_test/
tar_test/.svn/
tar_test/.svn/5.txt
tar_test/1.txt
tar_test/2.txt
tar_test/3.txt
tar_test/4.txt
从压缩打印来看居然把.svn文件夹压缩进去了,why?
--其他错误写法
[pc@localhost ~]$ tar -cvf tar_test.tar.bz2 tar_test --exclude=/tar_test/.svn
tar_test/
tar_test/.svn/
tar_test/.svn/5.txt
tar_test/1.txt
tar_test/2.txt
tar_test/3.txt
tar_test/4.txt
[pc@localhost ~]$ tar -cvf tar_test.tar.bz2 tar_test --exclude=./tar_test/.svn
tar_test/
tar_test/.svn/
tar_test/.svn/5.txt
tar_test/1.txt
tar_test/2.txt
tar_test/3.txt
tar_test/4.txt
[pc@localhost ~]$ tar -cvf tar_test.tar.bz2 tar_test --exclude=./tar_test/.svn/
tar_test/
tar_test/.svn/
tar_test/.svn/5.txt
tar_test/1.txt
tar_test/2.txt
tar_test/3.txt
tar_test/4.txt
[pc@localhost ~]$ tar -cvf tar_test.tar.bz2 tar_test --exclude=/tar_test/.svn
tar_test/
tar_test/.svn/
tar_test/.svn/5.txt
tar_test/1.txt
tar_test/2.txt
tar_test/3.txt
tar_test/4.txt
--正确写法
###相对路径
[pc@localhost ~]$ tar -cvf tar_test.tar.bz2 tar_test --exclude=tar_test/.svn
tar_test/
tar_test/1.txt
tar_test/2.txt
tar_test/3.txt
tar_test/4.txt
[pc@localhost ~]$ tar -cvf tar_test.tar.bz2 tar_test --exclude=tar_test/.svn --exclude 1.txt
tar_test/
tar_test/2.txt
tar_test/3.txt
tar_test/4.txt
#绝对路径
[pc@localhost ~]$ tar -cvf tar_test.tar.bz2 ./tar_test --exclude=./tar_test/.svn
./tar_test/
./tar_test/1.txt
./tar_test/2.txt
./tar_test/3.txt
./tar_test/4.txt
[pc@localhost ~]$ tar -cvf tar_test.tar.bz2 ./tar_test --exclude=tar_test/.svn
./tar_test/
./tar_test/1.txt
./tar_test/2.txt
./tar_test/3.txt
./tar_test/4.txt
总结
1)打包的目录使用相对路径,排除的文件只能接相对路径
2)打包的目录使用绝对路径,排除的文件接相对路径或绝对路径
3)建议打包的目录和排除的文件使用的使用路径时,保持一致,都是用绝对路径,或都是用相对路径