查找不包含文件的目录

克里斯·DR

如何使用find命令查找不包含特定文件的目录?例如,如果我有一堆应该受到版本控制的目录,我可以搜索并找到没有.git子目录的目录吗?或者,我的项目指定所有模块都应有一个utilities.py文件;如何搜索以查找哪些子目录还没有所需的文件?

拉梅什

可能适合您的情况解决方案是,

find . -type d '!' -exec test -e "{}/utilities.py" ';' -print

测验

  1. 我创建了4个带有空格的子目录dir1dir2dir3dir我想测试一下是否可以很好地处理空格,这就是为什么我创建了一个名称中带有空格的目录的原因。
  2. dir2dir3中创建了文件file1file2file3file4
  3. dir1中,我创建了file1file2file3
  4. 带有空格的目录中,我创建了一个名为带有空格的文件file
  5. 现在,我执行find命令,

    find . -type d '!' -exec test -e "{}/file with spaces" ';' -print
    
  6. 我得到的输出是

    .
    ./dir1
    ./dir2
    ./dir3
    
  7. 不出所料,由于目录dir包含空格,因此文件名为file带有空格,因此未在输出中列出。如果我更改find命令以在其中添加file4,则得到的输出是,

    .
    ./dir with spaces
    ./dir1
    

编辑

但是,如果我们在最后一级嵌套了子目录和文件,则上述方法似乎不起作用。因此,要克服这种情况,您可以将搜索结果修改为此处讨论的内容

find . -type f -not -name 'utilities.py' -exec dirname {} \; | sort -u

就像吉尔斯在评论中所暗示的那样

因此.git,跳过父目录包含的目录会更有用.git您可以通过在正确的位置添加-prune来做到这一点:

find . -type d -exec test -e "{}/.git" ';' -prune -o -print

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章