繁体   English   中英

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

[英]Recursively find files with a specific extension

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

我知道我可以执行此命令

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

但除了扩展名之外,我还需要指定文件本身的名称。 我只是想看看有没有办法避免一遍又一遍地写文件名谢谢!

我的偏好:

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' \)
find -name "*Robert*" \( -name "*.pdf" -o -name "*.jpg" \)

-o代表OR条件,您可以在大括号内添加任意数量的内容。 因此,这表示要查找名称中任何位置包含“Robert”一词且名称以“pdf”或“jpg”结尾的所有文件。

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

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

这个 q/a 展示了如何使用 find 和正则表达式: How to use regex with find command?

模式可能是这样的

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

作为脚本,您可以使用:

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

使用 bash globbing(如果find不是必须的)

ls Robert.{pdf,jpg} 

与 ls 递归:(-al 用于包含隐藏文件夹)

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

使用文件数据库查找系统中的文件:

locate -e --regex "\.(h|cpp)$"

确保已安装locate package 即mlocate

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM