查找所有文件,例如shell中的* .xml文件

时间:2012-09-26 13:31:38

标签: regex bash shell find

使用bash,如何查找目录结构中除* .xml文件以外的文件? 我只想尝试使用

find . -regex ....

regexe:

'.*^((?!xml).)*$'

但没有预期的结果......

还是有其他方法可以实现这一点,即没有正则表达式匹配?

6 个答案:

答案 0 :(得分:16)

find . ! -name "*.xml" -type f

答案 1 :(得分:8)

find . -not -name '*.xml'

应该做的伎俩。

答案 2 :(得分:3)

比上面的find解决方案更笨拙,并且它可以完成比它需要更多的工作,但你可以做到

find . | grep -v '\.xml$'

另外,这是源代码树吗?也许您在树中拥有所有源代码和一些XML,但是您只想获取源代码?如果您使用ack,则可以执行以下操作:

ack -f --noxml

答案 3 :(得分:2)

使用bash:

shopt -s extglob globstar nullglob
for f in **/*!(.xml); do 
    [[ -d $f ]] && continue
    # do stuff with $f
done

答案 4 :(得分:1)

您也可以使用or-ring进行以下操作:

find . -type f -name "*.xml" -o -type f -print

答案 5 :(得分:0)

尝试这样的正则表达式解决方案:

find . -regextype posix-extended -not -regex '^.*\.xml$'