recursion地查找具有特定扩展名的文件

我试图find具有特定扩展名的文件。 例如,我想查找所有名为Robert的.pdf和.jpg文件

我知道我可以做这个命令

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

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

Solutions Collecting From Web of "recursion地查找具有特定扩展名的文件"

我的偏好:

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

使用find-regex参数:

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

或者只使用-name

 find . -name 'Robert.*' -a \( -name '*.cpp' -o -name '*.h' \) 

这q / a显示如何使用正则表达式查找 : 如何使用正则表达式与find命令?

模式可能是类似的东西

 '^Robert\\.\\(h|cgg\\)$' 
 find -name "*Robert*" \( -name "*.pdf" -o -name "*.jpg" \) 

-o要求OR条件,你可以在大括号内添加任意数量。 因此,这表示查找包含单词“Robert”的所有文件,其名称以“pdf”或“jpg”结尾。

作为在find上使用-regex选项的替代方法,由于问题被标记为bash ,因此可以使用括号扩展机制:

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

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

 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 "$@" 

 findcc directory grep_options 

喜欢

 findcc . -P '/Robert\.(h|cpp)$'