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”命令完成,但想稍后添加其他“查找”过滤器,如 mtime)。我的问题是上面的“发现”是如何工作的?为什么以下不起作用(使用 OR 选项)?

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

谢谢。

4

1 回答 1

1

-prune 始终计算值为 True。如果它是一个目录,则停止当前路径名的下降。如果指定了 -depth 标志,则忽略 -prune 标志。

我想如果你玩它,你可以弄清楚它在做什么。

例如

find . ! -name . -prune

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

我们不会因为修剪而进入 ./d ——“停止下降……”。然后通过 -name '*.tst' 过滤剩下的内容,使其成为顶级目录中的列表文件。

高温高压

于 2013-03-11T00:43:26.917 回答