13

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

find . -regex ....

正则表达式:

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

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

还是有另一种方法来实现这一点,即没有正则表达式匹配?

4

6 回答 6

20

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

于 2012-09-26T13:35:22.860 回答
9
find . -not -name '*.xml'

应该做的伎俩。

于 2012-09-26T13:35:43.570 回答
3

find上面的解决方案更草率,它做的工作比它需要的多,但你可以做

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

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

ack -f --noxml
于 2012-09-26T13:52:57.653 回答
2

用 bash:

shopt -s extglob globstar nullglob
for f in **/*!(.xml); do 
    [[ -d $f ]] && continue
    # do stuff with $f
done
于 2012-09-26T15:18:13.890 回答
1

您也可以使用 or-ring 执行此操作,如下所示:

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

于 2013-01-16T19:15:43.050 回答
0

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

find . -regextype posix-extended -not -regex '^.*\.xml$'
于 2019-01-18T15:37:32.450 回答