使用-regex和-exec查找命令,需要正则表达式帮助

时间:2010-12-08 17:52:28

标签: regex bash find

我有一个包含一堆人物图像的目录。不幸的是,图像来自的系统有一些人物图像的唯一ID,这些图像在企业的任何其他系统中都没有使用(即客人有图片但实际上并不在员工/客户数据库中... .just在图片服务器的存储中)。幸运的是,8个或更多整数后跟一个扩展名的图片是不需要的(我见过.bmp和.jpg ......但可能还有其他的)。在将ls -lh与rm -f交换并脚本删除其他系统的照片之前,我尝试了以下find命令作为测试。我猜我正在误解正则表达式,因为通常情况就是如此,但我看起来确实看起来似乎以下内容应该适用于我正在寻找的东西。 \ d {8,}似乎没有工作,因为删除它发现一切都很好,但我不想要一切....只有那些有8个或更多整数后跟任何东西。我在这里俯瞰什么?

find /path/to/dir -regex '\/path\/to\/dir\/\d{8,}.*' -exec ls -lh {} \;

感谢。

1 个答案:

答案 0 :(得分:4)

我不知道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类型的正则表达式),并且不需要/的反斜杠。无论如何,这些都有效。