Quando digito algo como:
find . -name *foo* | ls -lah
retorna o mesmo resultado que um ls
comando simples , como se não tivesse entrada.
Contudo:
ls -lah $( find . -name *foo* )
funciona bem, mas somente quando o find
comando tem resultados.
É possível canalizar para ls
?
bash
command-line
ls
pipe
Lasall
fonte
fonte
Respostas:
Você pode usar
-exec
com ofind
comandofonte
find . -name '*foo*' -exec ls -lah {} +
Isso deve funcionar.
fonte
-exec +
(ou-exec \;
).xargs
só é seguro usar com a-0
opção, o que significa que você precisa informar qualquer comando que canalizexargs
para delimitar os itens com bytes nulos (\ 0). Comfind
você pode fazer isso com-print0
. xargs -0 e find's -print0 não são padrão, mas -exec é, portanto, se a portabilidade for um problema, use find com -exec.Tente o seguinte:
fonte
Use isto: (ls pode classificar, funciona com nomes de arquivos com espaços ou caracteres incomuns)
find . -name *foo* -print0 | xargs -0 ls -lah
"-print0" significa que os nomes de arquivos como
file foo 1
serão obtidosfind
seguidos por nulo. O argumento "-0" para xargs diz que ele espera esse tipo de entrada, para que os nomes de arquivos com espaços sejam canalizadosls
corretamente para o comando.A
xargs
construção é, de certa forma, melhor do quefind etc -exec ls {} \;
porque todos os nomes de arquivos são enviados dels
uma só vez; portanto, se você deseja classificá-los todos por carimbo de data / hora (usandols
), algo como isso funciona:find . -iname *pdf -print0 | xargs -0 ls -ltr
Em um sistema NetBSD, "-printx" também é uma opção (isso me parece um argumento útil, mas seja o que for, temos xargs -0 e tudo bem):
find . -name *foo* -printx | xargs ls -lah
(não para o Ubuntu)fonte