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 \nfind 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