find
tem uma opção -ls
. Então seu comando deve ficar assim:
find -name '*.conf' -ls
Como posso encontrar um arquivo ao mesmo tempo ver o tamanho do arquivo? ERRO: Eu tentei este comando, mas eu só tenho o tamanho e os detalhes de outros arquivos.
find -name "*.conf" | ls -l
find
tem uma opção -ls
. Então seu comando deve ficar assim:
find -name '*.conf' -ls
Uma opção é especificar seu próprio formato com -printf
. Por exemplo, isso gerará o tamanho do arquivo seguido por um espaço, em seguida, o nome do arquivo (com caminho relativo):
find -name "*.conf" -printf "%s %p\n"
Você pode terminar sua string de formatação com
em vez de \n
find
se desejar separar os registros de saída do find NUL, no caso de esperar nomes de arquivos engraçados (por exemplo, incluindo newlines).
Para o registro, a tentativa mostrada na sua pergunta não funciona porque você está tentando canalizar a saída de ls
para a entrada para ls
. find
não lê nenhuma entrada de STDIN, portanto, a saída de ls
é simplesmente descartada e, em seguida, %code% lista o conteúdo do diretório atual, como de costume.
Outras respostas já apontaram
find
, usando -printf
ls
com find
apenas, usando -ls
find
para outro programa com xargs
No entanto, a primeira e a segunda abordagem não fornecem a saída exata de ls -l
(a -ls
é igual a ls -dils
) e a terceira precisa de uma chamada xargs
adicional. Com a ajuda do -exec
, é possível chamar ls -l
diretamente de find
:
find -name "*.conf" -exec ls -l {} +
Isso fornece toda a lista de nomes de arquivos como argumentos para ls -l
e o chama quantas vezes forem necessárias.
Se você quiser apenas corresponder a todos os arquivos terminados em .conf
dentro e abaixo do diretório atual (e ARG_MAX
não é um problema!), você realmente não precisa de find
. Em vez disso, você pode usar a correspondência de glob bash
com as opções globstar
e dotglob
shell da seguinte maneira - é igualmente sábio o suficiente não quebrar em novas linhas em nomes de arquivos e corresponder a arquivos "ocultos" como find
:
$ shopt -s globstar dotglob
$ ls -l **/*.conf
ls
não obtém sua lista de arquivos da entrada padrão, espera que sejam argumentos. O comando xargs
é um recurso geral para transformar entrada em argumentos:
find -name '*.conf' | xargs ls -l
No entanto, isso dividirá a entrada no espaço em branco, para que você possa ter problemas se algum dos nomes tiver espaços. find
e xargs
têm opções que funcionam juntas para atenuar isso:
find -name '*.conf' -print0 | xargs -0 ls -l
A opção -0
para xargs
diz para usar um byte nulo como o delimitador entre os parâmetros na entrada, e -print0
indica find
para imprimir os nomes separados por um byte nulo ao invés de nova linha. / p>
Tags command-line find files