用tar对某些文件打包
比如有一个project的文件夹,下面有bin、conf、lib、logs、common文件夹,bin文件夹下有nohup.out文件
我的目的是把这个文件夹下conf、common以及踢出bin下nohup.out文件的bin目录进行打包。
想用tar -cvf project.tar `find project | grep -v lib | grep -v logs | grep -v bin/nohup.out`命令
结果还是把所有的文件给打包了
单独执行find project | grep -v lib | grep -v logs | grep -v bin/nohup.out,是可以过滤的
如果用tar -cvf project.tar `find project | grep -e conf | grep -e common`命令,可以将find命令过滤出的文件进行打包。
为什么用grep -e 过滤可以,用grep -v过滤就不行?
[解决办法]
-bash-3.00$ find test
[解决办法]
grep -v sh #用find -v命令过滤
test ----------A
test/test.log
test/test.txt
---------------------------
既然你把结果都贴出来 你自己就应该分析一下
你看看A那个地方的test是什么? find之后第一行会显示目录 这个目录当成参数交给tar了 当然会全归档
-v 反检索 只显示不匹配的行 你把某个类型的文件过滤了 但是你并没把第一行显示的目录过滤
-e PATTERN 把样式做为一个partern 通常用在避免partern用-开始 所以你的-e并没有起到过滤的作用 而是匹配了
[解决办法]
再分析你贴的
-bash-3.00$ find test
[解决办法]
grep -v sh #用find -v命令过滤
test
test/test.log
test/test.txt
----------------------
↓
↓显示结果test test/test.log test/test.txt交给tar归档
↓test目录包括
↓test/test.sh
↓test/test.log
↓test/test1.sh
↓test/test.txt
↓test/testDate.sh
↓
-bash-3.00$ tar -cvf a.tar `find test
[解决办法]
grep -v sh` #tar对find过滤的文件进行打包,结果失败
test/
test/test.sh
test/test.log
test/test1.sh
test/test.txt
test/testDate.sh
test/test.log
test/test.txt
------------------------------
↓
打包成功,并非失败