O mesmo comando deve funcionar bem em um script:
#!/usr/bin/env bash
find te*/my\ files/ -print
Se você precisar para tê-lo como uma variável, fica um pouco mais complexo:
#!/usr/bin/env bash
search='te*/my\ files/'
eval find "$search" -print
AVISO:
Usar eval
como esse não é seguro e pode resultar na execução de código arbitrário e possivelmente nocivo se os nomes dos arquivos puderem conter determinados caracteres. Veja FAQ bash 48 para detalhes.
É melhor passar o caminho como argumento:
#!/usr/bin/env bash
find "$@" -name "file*"
Outra abordagem é evitar find
e usar os recursos e globs de globbing estendidos do bash:
#!/usr/bin/env bash
shopt -s globstar
for file in te*/my\ files/**; do echo "$file"; done
A opção globstar
bash permite usar **
para corresponder recursivamente:
globstar
If set, the pattern ** used in a pathname expansion con‐
text will match all files and zero or more directories
and subdirectories. If the pattern is followed by a /,
only directories and subdirectories match.
Para fazê-lo funcionar 100% como encontrar e incluir dotfiles (arquivos ocultos), use
#!/usr/bin/env bash
shopt -s globstar
for file in te*/my\ files/**; do echo "$file"; done
shopt -s dotglob
Você pode até echo
diretamente sem o loop:
echo te*/my\ files/**