天天看点

tar打包排除某个或多个子目录 | AWK命令

2010年4月25日

a18ccms

下午遇到一个小问题:文件目录结构如下

/dir0-

-/dir1         <—该文件很大,欲排除

-/dir2         <—该文件很大,欲排除

-/dir3         <—目标目录之一

-index.php  <—目标文件之一

………….以下省略N个子目录和子文件………….

目录下很多子目录,而我需要打包。目标是   /wwwroot 下所有子文件+/dir3 ,于是那些多余的子目录就让我头疼,

怎样在不影响文件结构的情况下打包呢,搜索网上,很多人用下面这个方法:

帮助

tar

cvzf \home\all.

tar

.gz dir0  --exclude dir1 --exclude dir2

但是并不好,要是排除的部分是多出,要是子目录过多,语句该要写多久啊,后来又发现网上说可以直接使用排除参数X

新建文件excludefiles在当前目录中,内容为

cat

excludefiles

dir1

dir2

tar

-cvzf \home\all.

tar

.gz -X excludefile dir1

注意:

tar命令里面的目标文件是绝对路径格式,excludefile里面就也必须是绝对路径;

tar命令里面的目标文件是相对路径格式,excludefile里面就也必须是相对路径;

后来 搜索找到了

自力博客的一样问题的文章

 说可以用 AWK 于是去搜索了一下它:

Awk学习笔记

 发现它提供的语句可以精简,可以这样写:

ls

-l |

awk

'\^-\ {print  $8}'

|

xargs

tar

cvfz \home\dir0.

tar

.gz

这个语句很好理解:

ls -l 列出所有文件和目录;

awk ‘\^-\ {print $8}’ 正则只保留文件行,获得第八列的所有文件名;

xargs tar 把上一步得到的名称传参给tar命令。

一切OK,轻松完成打包喽!