Não há necessidade de usar xargs
aqui. Basta usar a opção find
do -exec
.
$ find . -type f -exec file --mime-type -- {} +
Exemplos
padrão file
output
$ find 8* -type f -exec file --mime-type -- {} + | tail -5
89999/sample10.txt: text/plain
89999/sample2.txt: text/plain
89999/sample4.txt: text/plain
89999/sample6.txt: text/plain
89999/sample9.txt: text/plain
file -b
output
$ find 8* -type f -exec file --mime-type -b -- {} + | head -5
application/x-empty
text/x-perl
text/plain
text/plain
text/plain
Alternativas
Este é apenas um FYI, mas há outro comando chamado mimetype
, que você também pode usar para fazer o mesmo que file --mimetype
. Este comando faz parte deste pacote no Fedora, perl-File-MimeInfo
, e funciona de forma semelhante:
$ find 8* -type f -exec mimetype -- {} + | tail -5
89999/sample10.txt: text/plain
89999/sample2.txt: text/plain
89999/sample4.txt: text/plain
89999/sample6.txt: text/plain
89999/sample9.txt: text/plain
Exec mais elaborado
Se você tiver perguntado sobre "fazer mais do que apenas ecoar" e já que está tentando usar xargs
, concluo que você está pensando em fazer mais elaborações com xargs
.
Mas se você estiver usando find
, geralmente esse não é o melhor caminho a seguir. Em vez disso, você pode usar find
e, em find
, -exec
switch, chamar um shell e fazer coisas mais complicadas aqui, em vez de tentar convencer xargs
a fazer isso de uma maneira mais complexa.
$ find . -type f -exec sh -c '
cmd1;
cmd2;
file --mime-type -b "$@";
cmd3;
cmd4;
' sh {} \;
OBSERVAÇÃO: que eu mudei usando o +
terminator que passa vários argumentos para file --mime-type ...
para \;
, que passa um de cada vez.
Exemplo
$ find 8* -type f -exec sh -c '
echo -n "mime-type: ";
file --mime-type -b "$@"
' sh {} \; |& tail -10
mime-type: text/plain
mime-type: text/plain
mime-type: text/plain
mime-type: text/plain
mime-type: text/x-shellscript
mime-type: text/plain
mime-type: text/plain
mime-type: text/plain
mime-type: text/plain
mime-type: text/plain