我需要找到(或更具体地说,计算)与此模式匹配的所有文件:
* /富/ *。doc的
第一个通配符星号包含可变数量的子目录。
答案 0 :(得分:37)
使用gnu find你可以使用正则表达式(与-name
不同)匹配整个路径:
find . -regex '.*/foo/[^/]*.doc'
只计算文件数:
find . -regex '.*/foo/[^/]*.doc' -printf '%i\n' | wc -l
(%i
格式代码导致find
打印inode编号而不是文件名;与文件名不同,inode编号保证不具有换行符等字符,因此计数更可靠感谢@tripleee的建议。)
我不知道这是否适用于OSX。
答案 1 :(得分:9)
怎么样:
find BASE_OF_SEARCH/*/foo -name \*.doc -type f | wc -l
这是做什么的:
这种方法的好处:
更新:你想要变深吗?确定:
find BASE_OF_SEARCH -name \*.doc -type f | grep foo | wc -l
或者,您可以过滤掉文件名中包含“foo”的结果,因为这也会显示这些结果。
答案 2 :(得分:2)
未经测试,但请尝试:
find . -type d -name foo -print | while read d; do echo "$d/*.doc" ; done | wc -l
找到所有" foo"目录(在不同的深度)(这会忽略符号链接,如果你可以添加它们的问题的一部分);使用shell globbing来查找所有" .doc"文件,然后计算它们。
答案 3 :(得分:2)
基于此页面上其他页面上的答案,我设法将以下内容放在一起,其中在当前文件夹中执行搜索,在其下的所有其他文件中搜索扩展名为 pdf 的所有文件,然后对其标题上包含 test_text 的那些进行过滤。
find . -name "*.pdf" | grep test_text | wc -l