如何使用find
命令查找不包含特定文件的目录?例如,如果我有一堆应该受到版本控制的目录,我可以搜索并找到没有.git
子目录的目录吗?或者,我的项目指定所有模块都应有一个utilities.py
文件;如何搜索以查找哪些子目录还没有所需的文件?
可能适合您的情况的解决方案是,
find . -type d '!' -exec test -e "{}/utilities.py" ';' -print
测验
现在,我执行find命令,
find . -type d '!' -exec test -e "{}/file with spaces" ';' -print
我得到的输出是
.
./dir1
./dir2
./dir3
不出所料,由于目录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] 删除。
我来说两句