19,612
社区成员
发帖
与我相关
我的任务
分享
[root@cahop ~]# find A -name "*.c" | sort
A/1.c
A/B/2.c
A/B/C/3.c
A/B/C/D/4.c
find A -name "*.h" -exec tar zcvf only.tar {} \;
这样用的话,-exec执行是条件每触发一次,就执行一次,而tar zcvf会反复去创建压缩包,因此,用-exec的话,最后,压缩包只有一个文件在里面,就是最后一个4.h
find A -name "*.h" -exec tar zcvf only.tar {} \;
A/1.h
A/B/C/D/4.h
A/B/C/3.h
A/B/2.h
看看压缩包到底有什么:
[root@cahop ~]# tar zxvf onlyA.tar
A/B/2.h #可见,只把find找到的最后一个*.h放在了压缩包里
#而xargs的结果呢?
[root@cahop ~]# tar zxvf only.tar
A/1.h
A/B/C/D/4.h
A/B/C/3.h
A/B/2.h
#可见,xargs能满足把找到的所有文件打包的要求(但是,xargs也有缺陷,就是参数不能太长,比如你要是有几千上万个*.h的话,可能会报错)
[root@aaa ~]# tree A
A
|-- 1.c
|-- 1.h
|-- 1.o
`-- B
|-- 2.c
|-- 2.h
|-- 2.o
`-- C
|-- 3.c
|-- 3.h
|-- 3.o
`-- D
|-- 4.c
|-- 4.h
`-- 4.o
3 directories, 12 files
[root@ ~]#
[root@aaa ~]#
[root@aaa ~]# find A -name "*.h" |xargs tar zcvf only.tar
A/1.h
A/B/C/D/4.h
A/B/C/3.h
A/B/2.h