递归查找具有特定扩展名的文件

时间:2014-09-05 20:35:56

标签: linux bash

我正在尝试查找具有特定扩展名的文件。 例如,我想找到所有名为Robert

的.pdf和.jpg文件

我知道我可以做这个命令

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

但我需要指定除扩展名之外的文件名。 我只是想看看是否有可能避免再次重复写入文件名 谢谢!

8 个答案:

答案 0 :(得分:82)

我的偏好:

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

答案 1 :(得分:14)

使用find' -regex参数:

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

或者只使用-name

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

答案 2 :(得分:3)

find -name "*Robert*" \( -name "*.pdf" -o -name "*.jpg" \)

-o条件OR条件,您可以在大括号内添加任意数量的{{1}}条件。所以这就是在名称中找到所有包含“Robert”字样的文件,其名称以“pdf”或“jpg”结尾。

答案 3 :(得分:3)

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

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

答案 4 :(得分:2)

此q / a显示了如何将find与正则表达式一起使用:How to use regex with find command?

模式可能类似于

'^Robert\\.\\(h|cgg\\)$'

答案 5 :(得分:1)

作为脚本,您可以使用:

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

并将其用作

findcc [name] [[search_direcory]]

e.g。

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)$'

答案 6 :(得分:1)

使用bash遍历(如果不是find的话)

ls Robert.{pdf,jpg} 

答案 7 :(得分:0)

使用ls:(-al表示隐藏文件夹)递归

ftype="jpg"
ls -1R *.${ftype}  2> /dev/null