tar的-p开关,-C开关和-c以及-x开关
touch的-t开关与find配合的妙用
xargs 与find -exec的区别在于:前者知道其后的cmd最多可以带多少个参数,而后者一次只能一次操作一个参数,所以xargs可以有效降低命令执行的负载
xargs与find中-exec选项的区别在于前者可以一次操作x个参数(-nx)
处理带空格的文件名时,xargs会产生问题,因为其缺省分割符是空格,但gnu版本的-0选项与gnu版本find的-print0选项配合,可以以'\0'为分隔符,我试验了一下,的确如此,使用xargs的-d'\n'开关和find的-print 配合可以达到同样的目的;
xargs的-i选项指定由find传递过来参数在命令中的位置(缺省是在最后),参数本身由{}指代;
find的要点:
find就是一个逻辑表达式(由无数与/或/非组成)无论是筛选文件的一系列条件(如-name,-user,-newer,-inum...)还是相应的动作(-exec,-print,-ls,-xdev...)都是逻辑表达式的一部分,find会把指定路径下的文件逐一交给这一逻辑表达式来校验,遵从短路原则:对与操作,碰到第一个false就返回,否则继续校验;对或操作,碰到第一个true就返回,否则继续校验;对find程序本身而言,它是不区分条件和动作的;
find的-prune参数:
这是比较浑人的一个知识点,主要有两点含义:
- 总是返回true(当-depth参数存在时,本参数失效)
- 如果满足条件的文件是目录时,作为一个副作用,find会跳过目录内的内容(即使把-prune取反,如”! -prune“,还是这样!)
真正要达到愿意,需要这样:
find . -type d \! -name "." -prune -o -ls
-wholename参数不对"/"和"."作特殊处理,认为这是路径的自然组成部分,和-prune搭配,可以很好的忽略对一些目录层级内容(不包括这些目录本身)的处理!
例如:
find . -xdev -wholename "./download/*/pollini/*" -prune -o -ls |grep -i pollini
只会输出:
./download/Chopin/pollini
而该目录下的文件则被忽略,另外要指出,虽然中间的目录(Chopin)用*替代,但find还是顺利的找到,其实,目录层次再多点,全都用*替换,也没有问题!
0 comments:
Post a Comment