linux中如何递归搜索文件,关于linux:递归查找具有特定扩展名的文件

我正在尝试查找具有特定扩展名的文件。

例如,我要查找所有名为Robert的.pdf和.jpg文件

我知道我可以执行此命令

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

但是我需要指定扩展名之外的文件本身的名称。

我只想看看是否有一种避免重复写入文件名的方法

谢谢 !

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

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

我的偏好:

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

效果很好,但缺点是它使您无法执行find -exec ...

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

如果您将jpg或png作为较长路径的一部分,则此方法将无法正常工作。

使用find的-regex参数:

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

或仅使用-name:

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

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

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

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

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

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

据我所知,大括号内不会发生变量扩展。

哦,我继续尝试eval find。 -false" -o -name *"。{cs,config},它报告相同的错误。

如果使用的是全局扩展字符,则在传递给eval时使用\对其进行转义。

终于评估。 -false" -o -name *"。{cs,config}现在可以了,非常感谢!

我想在Android Shell中使用此技术,但其find不支持-false。为此,我给出了两个互斥的条件,因此它们都是错误的:-inum 1 -inum 2。

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

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

这个问题/答案显示了如何在正则表达式中使用find:如何在find命令中使用正则表达式?

模式可能像

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

使用bash遍历(如果不是必须find)

ls Robert.{pdf,jpg}

作为脚本,您可以使用:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值