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


81

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

我知道我可以执行此命令

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

但是我需要指定扩展名之外的文件本身的名称。我只是想看看是否有一种避免重复写入文件名的方法,谢谢!


4
复制此命令或其下方的任何人都应iname改用-不区分大小写
Addison

好一点,艾迪生(因此+1)。但是,OP似乎希望使用大写的“ R”命名名为“ Robert”的文件。在我解释这篇文章时,这意味着不应输出包含“ robert”的文件。写的是“ R obert”。但是,在某些情况下,有人希望找到“罗伯特”或“罗伯特”。也许OP处于这种情况。是使用iname还是name取决于您要查找的内容。我去过的情况是至关重要的。
bballdave025 '18

Answers:


100

我的偏好:

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

2
效果不错,但有一点缺点是,您无法进行find -exec ...
Mark Setchell 2014年

如果我想在特定路径的所有文件夹中找到所有xxx-deployment.yml文件怎么办?
Naim Salameh

如果您拥有较长路径jpgpng作为较长路径的一部分,则此方法将无法很好地工作。
AutonomousApps

17

使用find-regex参数:

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

或者只是使用-name

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

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

-orepreents的OR条件,并根据需要在大括号内,你可以添加许多。因此,这意味着要在名称中的任何位置查找所有包含单词“ Robert”且名称以“ pdf”或“ jpg”结尾的文件。


3

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

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

查找报告“路径必须在表达式之前”,这是什么问题?我通常添加引号来解决它,但不适用于此表达式。谢谢!
netawater

我怀疑您是忘记了eval还是上述.命令中的,或者您find是更复杂事物的别名,或者您没有find在Linux版本上使用普通的GNU 。
jxh

感谢您的答复,我使用了一个像这样的脚本:FILEEXTEIONS = cs,[ch] eval find。-false“ -o -name *”。{$ FILEEXTEIONS},它将报告该错误。
netawater

据我所知,变量扩展不会在括号扩展括号内发生。
jxh 2015年

1
我想在Android Shell中使用此技术,但find不支持-false。我通过给出两个互斥的条件来解决此问题,因此它们共同是错误的:-inum 1 -inum 2
starfry


1

作为脚本,您可以使用:

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

1

使用bash通配(如果find不是必须的话)

ls Robert.{pdf,jpg} 

0

ls:(-al表示包含隐藏文件夹)

ftype="jpg"
ls -1R *.${ftype}  2> /dev/null
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.