![Найти все файлы '.c' и '.h' в каталоге, за исключением каталогов 'test' в Linux](https://rvso.com/image/1457436/%D0%9D%D0%B0%D0%B9%D1%82%D0%B8%20%D0%B2%D1%81%D0%B5%20%D1%84%D0%B0%D0%B9%D0%BB%D1%8B%20'.c'%20%D0%B8%20'.h'%20%D0%B2%20%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D0%B5%2C%20%D0%B7%D0%B0%20%D0%B8%D1%81%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%D0%BC%20%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D0%BE%D0%B2%20'test'%20%D0%B2%20Linux.png)
Я хочу найти все файлы .c и .h в моем каталоге, за исключением тех, что находятся в папках «test» (их несколько).
В каталоге, который я ищу, есть тестовые каталоги, такие как:
myDirectory/abc/def/test
myDirectory/abc/def/ghi/test
и т. д.
На данный момент я попробовал:
find /myDirectory/* -type d -name test -prune -o -name '*.c' -print
и это, кажется, работает для файлов .c, но когда я запускаю:
find /myDirectory/* -type d -name test -prune -o -name '*.c' -o -name '*.h' -print
вообще ничего не возвращается.
Как включить несколько типов файлов?
решение1
Вам необходимо сгруппировать два -name
предиката:
find /myDirectory/* -type d -name test -prune -o \( -name '*.c' -o -name '*.h' \) -print
Обратная косая черта необходима для экранирования скобок.