[英]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
选项的替代方法,由于问题被标记为bash ,您可以使用大括号扩展机制:
eval find . -false "-o -name Robert".{jpg,pdf}
作为脚本,您可以使用:
find "${2:-.}" -iregex ".*${1:-Robert}\.\(h\|cpp\)$" -print
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.