O padrão que você provavelmente pretendia usar era *.txt
, mas está dizendo find -name
para usar '*.txt'
, incluindo as aspas simples, que não correspondem a nenhum arquivo. A expansão funciona da seguinte forma:
Na linha de comando , quando você digita
$ find -name '*.txt'
seu shell vê o '*.txt'
como cotação, por isso, ele retira as cotas e transmite o conteúdo, *.txt
, para find
.
Na função ,
find -name "'$var'"
o shell expande $var
para *.txt
. Como a expansão ocorreu entre aspas duplas, o shell retira aspas duplas e transmite o conteúdo, '*.txt'
, para find
.
A solução é simples: remova as aspas simples em find -name "'$var'"
.
Eu retomei sua função para você:
findin () {
if (( $# < 2 )); then
>&2 echo "Usage: findin <file pattern> <grep arguments ...>"
return 1
fi
pattern=$1
shift
printf '%s\n' "-- ${pattern}"
printf '%s ' "-- $@"
echo
find -type f -name "${pattern}" -print0 |
xargs -0 grep --color=auto "$@"
}