Найти все файлы, кроме, например, *.xml файлы в оболочке

Используя bash, как найти файлы в структуре каталогов, кроме файлов *.xml? Я просто пытаюсь использовать

find . -regex ....

regexe:

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

но без ожидаемых результатов...

или существует ли другой способ для достижения этого, то есть без соответствия регулярного выражения?

Ответ 1

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

Ответ 2

find . -not -name '*.xml'

Должен сделать трюк.

Ответ 3

Sloppier, чем предыдущие решения find, и он работает больше, чем нужно, но вы могли бы сделать

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

Кроме того, это дерево исходного кода? Возможно, у вас есть весь исходный код и некоторый XML в дереве, но вы хотите получить только исходный код? Если вы использовали ack, вы могли бы сделать:

ack -f --noxml

Ответ 4

с bash:

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

Ответ 5

Вы также можете сделать это с помощью или-ring следующим образом:

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

Ответ 6

Попробуйте что-то вроде этого для решения регулярных выражений:

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