为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用find命令使用正则表达式?

/ 猿问

如何使用find命令使用正则表达式?

偶然的你 2019-09-19 09:58:16

我有一些用生成的uuid1字符串命名的图像。例如81397018-b84a-11e0-9d2a-001b77dc0bed.jpg。我想使用“find”命令找出所有这些图像:


find . -regex "[a-f0-9\-]\{36\}\.jpg".

但它不起作用。正则表达式出了什么问题?有人可以帮我吗?


查看完整描述

3 回答

?
白板的微信

find . -regextype sed -regex ".*/[a-f0-9\-]\{36\}\.jpg"

请注意,您需要.*/在开头指定,因为find匹配整个路径。


例:


susam@nifty:~/so$ find . -name "*.jpg"

./foo-111.jpg

./test/81397018-b84a-11e0-9d2a-001b77dc0bed.jpg

./81397018-b84a-11e0-9d2a-001b77dc0bed.jpg

susam@nifty:~/so$ 

susam@nifty:~/so$ find . -regextype sed -regex ".*/[a-f0-9\-]\{36\}\.jpg"

./test/81397018-b84a-11e0-9d2a-001b77dc0bed.jpg

./81397018-b84a-11e0-9d2a-001b77dc0bed.jpg

我的发现版本:


$ find --version

find (GNU findutils) 4.4.2

Copyright (C) 2007 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.


Written by Eric B. Decker, James Youngman, and Kevin Dalley.

Built using GNU gnulib version e5573b1bad88bfabcda181b9e0125fb0c52b7d3b

Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS() CBO(level=0) 

susam@nifty:~/so$ 

susam@nifty:~/so$ find . -regextype foo -regex ".*/[a-f0-9\-]\{36\}\.jpg"

find: Unknown regular expression type `foo'; valid types are `findutils-default', `awk', `egrep', `ed', `emacs', `gnu-awk', `grep', `posix-awk', `posix-basic', `posix-egrep', `posix-extended', `posix-minimal-basic', `sed'.


查看完整回答
反对 回复 2019-09-19
?
BIG阳

该-regex发现表达式匹配的全名,包括从当前目录的相对路径。为此,find .始终以./任何目录开头。


此外,这些是emacs正则表达式,其具有除通常的egrep正则表达式之外的其他转义规则。


如果这些都直接在当前目录中,那么


find . -regex '\./[a-f0-9\-]\{36\}\.jpg'

应该管用。(我不太确定 - 我无法在这里得到重复的计数。)你可以通过-regextype posix-egrep以下方式切换到egrep表达式:


find . -regextype posix-egrep -regex '\./[a-f0-9\-]{36}\.jpg'

(请注意,这里所说的一切都是针对GNU查找的,我对BSD一无所知,这也是Mac上的默认设置。)


查看完整回答
反对 回复 2019-09-19
?
智慧大石

简单的方法 - 你可以在开头指定。*因为find匹配整个路径。


$ find . -regextype egrep -regex '.*[a-f0-9\-]{36}\.jpg$'

找到版本


$ find --version

find (GNU findutils) 4.6.0

Copyright (C) 2015 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later 

<http://gnu.org/licenses/gpl.html>.

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.


Written by Eric B. Decker, James Youngman, and Kevin Dalley.

Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION 

FTS(FTS_CWDFD) CBO(level=2)


查看完整回答
反对 回复 2019-09-19

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信