当前位置: 代码迷 >> Solaris >> [solaris]上tar命令怎么排除文件夹
  详细解决方案

[solaris]上tar命令怎么排除文件夹

热度:8700   发布时间:2013-02-26 00:00:00.0
[solaris]下tar命令如何排除文件夹

[solaris]下tar命令如何排除文件夹

今天处理重庆的事务碰到一个问题:在solaris下如何使用tar命令排除文件夹进行打包。向王伟请教了下终于解决了,拿出来大家分享一下:

场景及问题

? ?现有目录结构如下:
? ?dir1
? ?dir1/dfile1.txt
? ?dir1/dd1/dfile.txt
? ?dir2
? ?dir3
? ?要求使用tar进行打包,但是不包含目录[dir1/dd1].

解决方法

? ?## 指定excludefiles文件内容 ##
? ?bash-2.05# echo dir1/dd1 > excludefiles
? ?## 查看excludefiles文件内容 ##
? ?bash-2.05# more excludefiles
? ?dir1/dd1
? ?## 打包excludefiles之外的所有内容 ##
? ?bash-2.05# tar -cvfX mytest.tar excludefiles *
? ?a dir1/ 0K
? ?a dir1/fd1.txt 1K
? ?dir1/dd1 被排除
? ?a dir2/ 0K
? ?a dir3/ 0K
? ?a dir4/ 0K
? ?a ex 1K
? ?## 查看打包结果 ##
? ?bash-2.05# tar -ft mytest.tar
? ?dir1/
? ?dir1/fd1.txt
? ?dir2/
? ?dir3/
? ?dir4/
? ?excludefiles

? ?说明:tar的参数X用来指定排除的文件及目录,排除的文件及目录在excludefiles 文件中指定。

需要注意的问题

? ? 1) 如果 tar -cvfX mytest.tar excludefiles * 改成 tar -cvfX mytest.tar excludefiles ./* 将无法排除指定内容目录及文件
? ? 2) 如果修改 excludefiles 内容为 ./dir1/dd1 ,则 tar -cvfX mytest.tar excludefiles ./* 可以排除指定内容, 而 tar -cvfX mytest.tar excludefiles * 则无法成功
? ? 分析原因 excludefiles 文件中指定内容应该和 ls命令执行结果相匹配,才能做到文件排除。
? ???如执行 tar -cvfX mytest.tar excludefiles /home2/zzyang/* , 则相应的excludefiles中内容应该为 /home2/zzyang/dir1/dd1

网上的其他方法

? ? 网上找到的方法均无法解决该问题,貌似在linux下可以使用 --exclude=dirname 参数, 但是在solaris下无法执行成功。举一个网上的解决方法供大家参考:
[root@test xok.la]# ls -l
总用量 3
drwxr-xr-x? ?2 root root 1024 10月 29 21:20 xdir1
drwxr-xr-x? ?2 root root 1024 10月 29 21:21 xdir2
drwxr-xr-x? ?2 root root 1024 10月 29 21:21 xdir3
-rw-r--r--? ?1 root root? ???0 10月 29 21:21 xfile1
-rw-r--r--? ?1 root root? ???0 10月 29 21:21 xfile2
-rw-r--r--? ?1 root root? ???0 10月 29 21:21 xfile3
-rw-r--r--? ?1 root root? ???0 10月 29 21:21 xfile4
[root@test xok.la]# tar zcvf xok.la.tar.gz * --exclude=xfile1 --exclude=xfile2 --exclude=xdir1
xdir2/
xdir3/
xfile3
xfile4
[root@test xok.la]# tar ztf fd.tar.gz
xdir2/
xdir3/
xfile3
xfile4

[root@test xok.la]#

再次感谢王大拿。