查找不包含某个子目录的目录

我知道我可以这样做来获取/ vz / root目录中的目录列表:

find /vz/root/ -type d -maxdepth 1 -exec echo {} \; 

但我怎样才能编辑这个只列出不包含名为“php-5.3.3”的子目录的目录? 因此,如果有3个目录/ vz / root / 101,/ vz / root / 102和/ vz / root / 103,并且其中两个包含php-5.3.3子目录,那么它只会回显那个没有没有。

尝试

 find /vz/root/ -maxdepth 1 -type d \! -exec test -d '{}/php-5.3.3' \; -print | grep -v php-5.3.3 | uniq -w 12 | grep -v '^/vz/root/$' 

如果你想排除包含php-5.3.3的path,你可以简单地使用grep -v

 find /root/ -maxdepth 1 -type d -exec echo {} \; | grep -v php-5.3.3 

你可以用 作为不是运营商。

 find /vz/root/ -type d -maxdepth 1 ! -ipath '*php-5.3.3*' -exec echo {} \; 

这将列出/ vz / root /下的所有目录,除了path名中有php-5.3.3的目录外。

可以通过find来find几乎可以解决的问题,然后使用find2perl来创build一个执行相同操作的Perl程序。 然后修改Perl脚本来做一些先进的事情。 我不会列举,因为你要求find命令的一个变体,这是在你的请求的范围之外。 此外,你必须知道一些Perl,我不想开始一个火焰战争。

接受答案的简化版本:

 find /vz/root/ -type d -maxdepth 1 -exec test ! -d "{}/php-5.3.3" \; -print