type
não é um comando normal. É um buitin de conchas. Veja:
$ type type
type is a shell builtin
Então, você precisa invocar bash
com -c
para conseguir o que deseja
$ find . -name anacron | xargs -I '{}' bash -c "type {}"
Ou ainda mais simples (não é necessário usar xargs
):
$ find . -name anacron -exec bash -c "type {}" \;
Ele chamará bash -c "type ./file"
, com todos os arquivos encontrados por find
. -I
in xargs
significa que definimos aqui um espaço reservado {}
para usar mais tarde. Este espaço reservado é substituído pelo nome de arquivo encontrado.
Por que os recursos internos do shell não funcionam com xargs
:
Os comandos [...] internos estão contidos dentro do próprio shell. Quando o nome de um comando interno é usado como a primeira palavra de um comando simples, o shell executa o comando diretamente, sem invocar outro programa. [...]
xargs lê itens da entrada padrão, e [...] executa o comando
O comando neste caso é um simples exequível, e um shell embutido não é um executável. Não pode ser encontrado no sistema de arquivos. Está dentro da própria casca. Então você tem que chamar o shell e dizer ao shell chamado para invocar o comando interno. Isso é o que aconteceu com bash -c "command"
.