Você pode fazer isso com o GNU find ou outro find que suporte -path
, mas não acho que seja mais elegante.
find src \( -type f -executable ! -path 'src/*/*' -o -name '*.txt' \) \
-exec ln -fs {} . +
Você pode usar o zsh no lugar. Seus qualificadores glob são mais concisos do que encontrar a sintaxe.
ln -sf src/*/*(N*.) src/**/*.txt .