2014-09-05 152 views
37

我试图查找具有特定扩展名的文件。 例如,我想找到的命名罗伯特递归地查找具有特定扩展名的文件

所有.pdf和.jpg文件,我知道我能做到这一点命令

$ find . -name '*.h' -o -name '*.cpp' 

,但我需要指定文件本身除了扩展名。 我只想看看是否有可能避免再次写入文件名 谢谢!

回答

48

我的偏好:

find . -name '*.jpg' -o -name '*.png' -print | grep Robert

+1

很好地工作,但稍微缺点是,它排除了你做'find -exec ...' – 2014-09-06 08:20:33

+0

如果我想在特定路径的所有文件夹中找到所有xxx-deployment.yml文件,该怎么办? – 2017-11-09 19:19:27

11

使用find-regex说法:

find . -regex '.*/Robert\.\(h\|cpp\)$' 

或者只是使用-name

find . -name 'Robert.*' -a \(-name '*.cpp' -o -name '*.h' \) 
2
find -name "*Robert*" \(-name "*.pdf" -o -name "*.jpg" \) 

-o repreents一个OR条件,你可以添加你想要在大括号内为多。因此,这表示查找包含名称中任何位置的单词“Robert”的所有文件,其名称以“pdf”或“jpg”结尾。

1

作为替代使用上find-regex选项,因为这个问题被标记为,可以使用支具膨胀机构:

eval find . -false "-o -name Robert".{jpg,pdf} 
+0

发现报告 “的路径必须先表达”,有什么问题呢?我通常会添加引号来解决它,但不适用于此表达式。谢谢! – netawater 2015-11-16 05:28:14

+0

我怀疑你在上面的命令中忘记了'eval'或者''',或者你的'find'是更复杂的别名,或者你的Linux版本没有使用GNU'find'。 – jxh 2015-11-16 16:51:54

+0

感谢您的回复,我使用了这样的脚本:FILEEXTEIONS = cs,[ch] eval find。 -false“-o -name *”。{$ FILEEXTEIONS},并报告错误。 – netawater 2015-11-17 01:47:06

1

作为一个脚本,您可以使用:

find "${2:-.}" -iregex ".*${1:-Robert}\.\(h\|cpp\)$" -print 
  • 另存为findcc
  • 搭配chmod 755 findcc

并使用它作为

findcc [name] [[search_direcory]] 

例如

findcc     # default name 'Robert' and directory . 
findcc Joe    # default directory '.' 
findcc Joe /somewhere # no defaults 

记下您不能使用

findcc /some/where #eg without the name... 

也可以作为替代,你可以使用

find "$1" -print | grep "[email protected]" 

findcc directory grep_options 

findcc . -P '/Robert\.(h|cpp)$' 
相关问题