使用-regex和-exec查找命令,需要正则表达式帮助
问题描述:
我有一个包含一堆人图像的目录。不幸的是,图像来自的系统具有自己独特的ID,用于许多人物图像,这些图像在业务中的任何其他系统中都没有使用(例如,客人有图片但实际上并不在雇员/客户数据库中... 。只是在图片服务器的存储)。幸运的是,8个或更多的整数后跟一个扩展名的图片是不需要的(我见过.bmp和.jpg ......但可能有其他的)。在使用rm -f替换ls -lh并将脚本移除其他系统的照片之前,我已尝试将以下find命令作为测试。我猜测我误解了正则表达式,因为通常情况下,但我看起来无处不在的情况下,似乎下面的内容应该适用于我正在寻找的内容。 \ d {8,}似乎没有工作,因为删除它发现一切都很好,但我不想要一切......只是那些有8个或更多的整数,然后是什么。我在这里忽略了什么?使用-regex和-exec查找命令,需要正则表达式帮助
find /path/to/dir -regex '\/path\/to\/dir\/\d{8,}.*' -exec ls -lh {} \;
谢谢。
答
我不知道find
正则表达式类型是系统特定的。我在Linux中看到它有几种类型的正则表达式(POSIX与Emacs不同)。似乎find中的默认正则表达式类似于emacs。我见过find
也有-regextype
选项,因此,使用posix-extended
你可以得到类似于你想要的东西:
find /path/to/dir -regextype posix-extended -regex '/path/to/dir/[0-9]{8,}.*' -exec ls -lh {} \;
,但你不必对这些类型的正则表达式的\d
(我觉得他们仅来自Perl类型的正则表达式),并且不需要反斜杠/
。无论如何,这些作品。
非常感谢。在寒冷的冬天,我应该找一本好书在壁炉旁读正规表达。在寒冷的天气期间,读一本关于正则表达式的书,感受温暖的更好的方式是什么? – wilbbe01 2010-12-08 19:29:37