用find和regex区分.h和.sh

时间:2019-07-16 16:41:46

标签: regex linux bash redhat

我正在尝试从目录中删除具有某些扩展名的文件。我使用的命令无法区分.h和.sh。我在哪里可以改善我的正则表达式?

这是我当前的命令:

find directory/ -type f -regextype posix-extended -regex '.*.(java|[hc]|cpp|hpp|cc|hh)' 

当前,这将返回.csh和.sh文件。我不希望那样发生。当我删除“ [hc]”时,此问题得以解决,但随后找不到任何.c或.h文件。我也尝试过

find directory/ -type f -regextype posix-extended -regex '.*.(java|h|c|cpp|hpp|cc|hh)'

但是这也会返回.csh和.sh文件。

1 个答案:

答案 0 :(得分:3)

添加输入锚点的结尾:

find ... -regex '.*\.(java|h|c|cpp|hpp|cc|hh)$'

这使列表成为扩展的绝对列表,而不仅仅是扩展的前缀