2013-03-10 59 views
0
$pwd 
/tmp 
$touch 1.tst 2.tst 
$mkdir inner_dir 
$touch inner_dir/3.tst 
$find . ! -name . -prune -name '*.tst' 
1.tst 
2.tst 

我想限制“查找”只搜索到与“TST”扩展名的文件的当前目录(我知道这是可以做到的'ls'命令,但希望稍后添加其他“查找”过滤器)。 我的问题是上面的'find'是如何工作的? 为什么以下工作(带有OR选项)?-prune在发现没有OR(-o)选项工作 - Unix的

find . ! -name . -prune -o -name '*.tst' 

谢谢。

+0

http://content.hccfl.edu/pollock/unix/findcmd.htm。看到底部附近,我认为这适用于你的情况。祝你好运。 – shellter 2013-03-10 20:09:55

回答

1

-prune 总是求值为True。如果它是目录,则停止当前路径名称的下降。如果指定了-depth标志,则忽略-prune标志为 。

我想如果你玩它,你可以找出它在做什么。

例如

find . ! -name . -prune 

./1.tst 
./2.tst 
./d 

我们不进入下来./d因为剪枝的 - “停止下降......”。然后剩下的部分被名称'* .tst'过滤为顶层目录中的列表文件。

HTH