Найти все файлы, соответствующие заданному шаблону И исключающие заданный шаблон?

Я хочу найти все файлы в каталоге, которые соответствуют заданному шаблону, скажем A, и не соответствуют заданному шаблону, например B.

Что я пробовал: выполнение «ls -I B» дает мне все файлы, соответствующие шаблону B. Но я не получаю никаких указаний о том, как делать то, что я хочу.


person dotgc    schedule 28.02.2014    source источник
comment
Как ls -l B дает вам все файлы, не соответствующие шаблону B?   -  person twalberg    schedule 28.02.2014


Ответы (1)


Вы можете использовать find . -name "pattern", а затем добавить отрицательное условие для шаблона, который вам не нужен:

find . -name "pattern_A" ! -name "pattern_B"

Пример

Давайте найдем те файлы, имя которых содержит A, но не содержит B:

$ ls -1
adfadAadsa
adfBasdA
Aksjdflksj
asdfBasdf
Badsf

$ find . -name "*A*" ! -name "*B*"
./Aksjdflksj
./adfadAadsa
person fedorqui 'SO stop harming'    schedule 28.02.2014
comment
+1 Параметр -regex для find часто полезен для учета сложных шаблонов. - person jaypal singh; 28.02.2014
comment
Вы можете добавить контроль глубины. Чтобы не искать подкаталоги: find . -maxdepth 1 -name "pattern_A" ! -name "pattern_B" - person shawnhcorey; 06.08.2016