我看到find
命令确实不是当您使用该-prune
选项时,下降到子目录。我如何告诉 find 递归到子目录,但也忽略一些东西?
具体来说,我想搜索/var/lib/foo
目录,但排除任何名为 的目录.snapshot/
。
sudo find /var/lib/foo -prune -name '.snapshot'
通过上述内容,它正确地忽略 .snapshot,但不会进入子目录。仅供参考,我正在 CentOS 6.3 主机上的 bash 中工作。
答案1
你需要做:
sudo find /var/lib/foo -name '.snapshot' -prune -o -print
它将打印任何未命名为“.snapshot”的内容,如果“.snapshot”是一个目录,它也不会进入其中。
为什么 ?因为“-prune”是一个操作(因为“-print”也是另一个操作),所以除了防止在子目录中进一步向下移动之外什么也不做。它总是返回“true”,所以在这里,( -name ... -prune ) 当且仅当文件或目录名为“...”时才为 true,并且您想要其他所有内容,因此 -o ( -打印 )。