Pelo meu entendimento, o seguinte deve significar exatamente o mesmo:
ls -1 | xargs file {}
ls -1 | xargs -I{} file {}
se a opção -I não for especificada, é o padrão para -I {}.
Quero listar todos os arquivos no diretório atual e executar o file
comando em cada um deles. Alguns têm espaços em seus nomes. No entanto, notei a diferença. Ver abaixo:
$ ls -1
Hello World
$ ls -1 | xargs file {}
{}: ERROR: cannot open `{}' (No such file or directory)
Hello: ERROR: cannot open `Hello' (No such file or directory)
World: ERROR: cannot open `World' (No such file or directory)
$ ls -1 | xargs -I{} file {}
Hello World: directory
Com -I {} especificado explicitamente, os espaços em branco nos nomes dos arquivos são tratados conforme o esperado.
xargs file
ou xargs -I{} file {}
. Não deveria ser xargs file {}
. Eu acho que ao especificar explicitamente -I {}, o bash o tratará como file "Hello World"
. Sem -I {}, é tratado como file Hello World
.
-1
opção ls
, mas ela está ativada por padrão quando a saída de ls
é um arquivo ou um canal, para que você não precise dela aqui. (3) Você está confuso -I
com a opção preterida -i
(minúscula I
). -ifoo
é equivalente a -Ifoo
, mas simples -i
é equivalente a -I{}
. Mas use -I{}
. (4) Se você realmente quer fazer o que diz que quer, por que não dizer file *
?
file
-los. Mas vim com um exemplo mais simples usando ls
. Você está certo. Para isso, file *
é o melhor.
-exec
.