我正在尝试查找具有特定扩展名的文件。 例如,我想找到所有名为Robert
的.pdf和.jpg文件我知道我可以做这个命令
$ find . -name '*.h' -o -name '*.cpp'
但我需要指定除扩展名之外的文件名。 我只是想看看是否有可能避免再次重复写入文件名 谢谢!
答案 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
选项的替代方法,由于问题标记为bash,您可以使用大括号扩展机制:
eval find . -false "-o -name Robert".{jpg,pdf}
答案 4 :(得分:2)
答案 5 :(得分:1)
作为脚本,您可以使用:
find "${2:-.}" -iregex ".*${1:-Robert}\.\(h\|cpp\)$" -print
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