Se eu emitir o comando find da seguinte maneira:
$ find . -name *.ear
Ele imprime:
./dir1/dir2/earFile1.ear
./dir1/dir2/earFile2.ear
./dir1/dir3/earFile1.ear
O que eu quero 'imprimir' na linha de comando é o nome e o tamanho:
./dir1/dir2/earFile1.ear 5000 KB
./dir1/dir2/earFile2.ear 5400 KB
./dir1/dir3/earFile1.ear 5400 KB
unix
command-line
find
solaris
Brian Hart
fonte
fonte
find . -name '*.ear' -exec ls -lh {} + \;
(extensão GNU) oufind . -name '*.ear' -print0 | xargs -0 ls -lh
. Além disso, você pode adicionar-type f
se estiver interessado apenas em arquivos (ou adicionar-d
a ls se quiser que os próprios diretórios sejam incluídos sem seu conteúdo).-type f
contar apenas arquivos regulares.find . -name "*.ear" -type f
para arquivos.-type d
funciona para diretórios.Você precisa usar -exec ou -printf. Printf funciona assim:
-exec é mais poderoso e permite que você execute comandos arbitrários - então você pode usar uma versão de 'ls' ou 'wc' para imprimir o nome do arquivo junto com outras informações. 'man find' mostrará os argumentos disponíveis para printf, que pode fazer muito mais do que apenas o tamanho do arquivo.
[editar] -printf não está no padrão POSIX oficial, então verifique se ele é compatível com sua versão. No entanto, a maioria dos sistemas modernos usará GNU find ou uma versão estendida de forma semelhante, então há uma boa chance de que seja implementado.
fonte
column
comando.find . -name *.ear -printf "%p %k KB\n" | column -t
-printf
opção não funciona no OS X também. Consulte stackoverflow.com/questions/752818/… .uma solução simples é usar a opção -ls em find:
Isso dá a você cada entrada no formato normal "ls -l". Ou, para obter a saída específica que você parece estar procurando, isto:
O que fornecerá o nome do arquivo seguido pelo tamanho em KB.
fonte
ls
opção, isso deveria estar muito mais alto na lista de respostas do que é.Usando gnu find, acho que é isso que você quer. Ele encontra todos os arquivos reais e não os diretórios (-type f), e para cada um imprime o nome do arquivo (% p), uma guia (\ t), o tamanho em kilobytes (% k), o sufixo "KB" e então uma nova linha (\ n).
Se o comando printf não formatar as coisas da maneira que você deseja, você pode usar exec, seguido pelo comando que deseja executar em cada arquivo. Use {} para o nome do arquivo e termine o comando com um ponto e vírgula (;). Na maioria dos shells, todos os três desses caracteres devem ser escapados com uma barra invertida.
Aqui está uma solução simples que os encontra e os imprime usando "ls -lh", que mostrará o tamanho em formato legível (k para kilobytes, M para megabytes):
Como outra alternativa, "wc -c" imprimirá o número de caracteres (bytes) no arquivo:
fonte
-name '*.ear'
nos exemplos, esta deve ser a resposta nº 1. Ele responde à pergunta com precisão, explica o significado da sintaxe e oferece várias alternativas.find . -type f -printf '%k KB\t %p\n'
ou seja, imprimir o tamanho do arquivo primeiro, provavelmente será uma saída melhor em termos de formatação devido ao alinhamento.Isso dá a você apenas o tamanho do arquivo, em vez de todas as coisas desnecessárias.
fonte
wc
funciona melhor para isso, se você precisar do tamanho em bytes.Awk pode consertar a saída para fornecer exatamente o que o questionador pediu. No meu sistema Solaris 10, encontre -ls tamanho das impressões em KB como o segundo campo, portanto:
Caso contrário, use -exec ls -lh e selecione o campo de tamanho da saída. Novamente no Solaris 10:
fonte
Por que não usar du -a ? Por exemplo
Funciona em um Mac
fonte
Tive dificuldade com isso no Mac OS X, onde o comando find não é compatível
-printf
.Uma solução que encontrei, que confia reconhecidamente no 'grupo' para todos os arquivos serem 'equipe' foi ...
Isso divide a saída ls long em três tokens
E então gera os tokens 2 e 3, ou seja, a saída é o número de bytes e o nome do arquivo
fonte
find
está disponível através do homebrew combrew install findutils
Isso deve fornecer o que você está procurando, incluindo a formatação (ou seja, o nome do arquivo primeiro e o tamanho depois):
saída de amostra (onde costumava
-iname "*.php"
obter alguns resultados):fonte
Você pode tentar isto:
Isso lhe dará o tamanho em bytes. Mas o comando du também aceita os parâmetros -k para KB e -m para MB. Isso lhe dará uma saída como
fonte
fonte
Referência do Scripter World
fonte
Experimente os seguintes comandos:
GNU
stat
:BSD
stat
:no entanto,
stat
não é padrão, entãodu
ouwc
poderia ser uma abordagem melhor:fonte
fonte
Se você precisa obter o tamanho total, aqui está uma proposta de script
fonte