Как найти два типа файлов: исполняемые и текстовые файлы

Я хотел бы найти два типа файлов (исполняемые и текстовые файлы) и создать для них программные ссылки. Мое решение до сих пор:

find src -maxdepth 1 -not -type d -executable -exec ln -fs {} . \;; \ find src -name "*.txt" -exec ln -fs {} . \; 

Структура каталогов:

 src src/lapack src/plasma 

Я хотел бы забрать исполняемые файлы только из src и текстовые файлы *.txt из подкаталогов lapack и plasma .

Я хотел бы найти более элегантное решение, которое бы объединяло два вызова find в один. Я попытался использовать флаг -o , но у меня возникли проблемы с параметром -maxdepth .

Обновить:

Комбинированная команда, которую я пробую:

 find src -maxdepth 1 -not -type d -executable -o -path src -name "*.txt" 

Но он не подбирает текстовые файлы в подкаталогах. Я считаю, что это связано с флагом -maxdepth 1 перед -o .

    Вы можете сделать это с помощью GNU find или другого find, который поддерживает -path , но я не думаю, что это более элегантно.

     find src \( -type f -executable ! -path 'src/*/*' -o -name '*.txt' \) \ -exec ln -fs {} . + 

    Вы можете использовать Zsh вместо. Его квалификаторы glob более кратки, чем синтаксис find.

     ln -sf src/*/*(N*.) src/**/*.txt .