面临同样的问题为什么“查找”没有按照我想象的方式进行修剪?,
但那公认答案对我不起作用:
这是我的文件:
$ find .
.
./resources
./resources/sitewide
./resources/sitewide/test.c
./resources/sitewide/.svn
./resources/sitewide/.svn/test.c
./resources/test.c
./resources/.svn
./resources/.svn/test.c
./test.c
./users
./users/avatars
./users/avatars/test.c
./users/avatars/.svn
./users/avatars/.svn/test.c
./users/test.c
./users/.svn
./users/.svn/test.c
./temporary
./temporary/test.c
./temporary/.svn
./temporary/.svn/test.c
./.svn
./.svn/test.c
这是使用接受的答案:
$ find -type d -path '.svn' -prune -o -print
.
./resources
./resources/sitewide
./resources/sitewide/test.c
./resources/sitewide/.svn
./resources/sitewide/.svn/test.c
./resources/test.c
./resources/.svn
./resources/.svn/test.c
./test.c
./users
./users/avatars
./users/avatars/test.c
./users/avatars/.svn
./users/avatars/.svn/test.c
./users/test.c
./users/.svn
./users/.svn/test.c
./temporary
./temporary/test.c
./temporary/.svn
./temporary/.svn/test.c
./.svn
./.svn/test.c
接受的答案存在两个问题,首先 .svn 仍然列出,其次,不仅列出了目录,还列出了文件。
这些问题我实际上可以解决。但我的问题是,
如何找到不在.svn 目录下的那些.c 文件?
我尝试了以下所有方法,但都不起作用:
find . -path '*/.svn' -prune -name "*.c" -print
find . -path '*/.svn' -prune -o -name "*.c" -print
find . -path '*/.svn' -prune -name "*.c" -o -print
find . -path '*/.svn' -prune -a -name "*.c" -print
请帮忙。
答案1
您的命令
find . -path '*/.svn' -prune -o -name "*.c" -print
确实应该可以工作,尽管你可以重写它
find . -name .svn -prune -o -name "*.c" -print
否则你的发现就失败了。我尝试了两个版本find --version
:
find (GNU findutils) 4.5.12
find (GNU findutils) 4.4.2