O dir
comando de listagem de diretórios do Windows possui uma linha no final, mostrando a quantidade total de espaço ocupado pelos arquivos listados. Por exemplo, dir *.exe
mostra todos os .exe
arquivos no diretório atual, seus tamanhos e a soma total de seus tamanhos. Adoraria ter uma funcionalidade semelhante ao meu dir
alias no bash, mas não sei exatamente como fazê-lo.
Atualmente, eu tenho alias dir='ls -FaGl'
no meu .bash_profile
, mostrando
drwxr-x---+ 24 mattdmo 4096 Mar 14 16:35 ./
drwxr-x--x. 256 root 12288 Apr 8 21:29 ../
-rw------- 1 mattdmo 13795 Apr 4 17:52 .bash_history
-rw-r--r-- 1 mattdmo 18 May 10 2012 .bash_logout
-rw-r--r-- 1 mattdmo 395 Dec 9 17:33 .bash_profile
-rw-r--r-- 1 mattdmo 176 May 10 2012 .bash_profile~
-rw-r--r-- 1 mattdmo 411 Dec 9 17:33 .bashrc
-rw-r--r-- 1 mattdmo 124 May 10 2012 .bashrc~
drwx------ 2 mattdmo 4096 Mar 24 20:03 bin/
drwxrwxr-x 2 mattdmo 4096 Mar 11 16:29 download/
por exemplo. Tomando as respostas desta pergunta :
dir | awk '{ total += $4 }; END { print total }'
o que me dá o total, mas não imprime a lista de diretórios em si. Existe uma maneira de alterar isso em um script de uma linha ou shell, para que eu possa passar os ls
argumentos que quiser dir
e obter uma lista completa mais a soma total? Por exemplo, eu gostaria de executar dir -R *.jpg *.tif
para obter a listagem e o tamanho total desses tipos de arquivo em todos os subdiretórios. Idealmente, seria ótimo se eu pudesse obter o tamanho de cada subdiretório, mas isso não é essencial.
fonte
ls -lh
ajuda você? Imprime a soma total no topo. Você também pode executardu -sh *.exe
para obter informações sobre o uso do espaço em disco em formato legível por humanos.ls -lh
está imprimindo, mas nem sempre está relacionado ao que osawk
scripts abaixo calculam ou ao que eu adiciono manualmente. Às vezes, é próximo ao número de KB de arquivos no diretório, mas parece não ter efeito nos tamanhos alocados dos subdiretórios. Eu ficaria muito grato se você poderia me apontar para uma explicação sobre o que exatamente esse número é ...ls -lh
não mostra o total de tamanho de um dir calcular o seu conteúdoRespostas:
A função a seguir faz a maior parte do que você está pedindo:
... mas não vai dar o que você está pedindo
dir -R *.jpg *.tif
, porque não é assim quels -R
funciona. Você pode querer brincar com ofind
utilitário para isso.fonte
dir
já é o nome de um popular GNU coreutil, prefiro não nomear uma função como essa.Já existe um comando UNIX para isso:
du
Apenas faça:
Conforme a convenção, você pode adicionar um ou mais caminhos de arquivo ou diretório no final do comando.
-h
é uma extensão para converter o tamanho em um formato adequado para humanos,-a
fornece o tamanho "aparente" (tamanho do arquivo em vez do uso do disco) e-c
fornece um total no final.fonte
du
fornece o uso do disco, não a soma dos tamanhos dos arquivos.du -h
não soma os tamanhos dos arquivos passados para ele.du -h *.so
mostra o tamanho de cada arquivo, mas não a soma. Eu acho que o que você está querendo aqui édu -hc *.so
(ou atédu -hc *.so | tail -1
). Mas é claro que ele também quer a lista de diretórios.-a
meios--all
. Considere, em vez utilizando--apparent-size
Você pode usar
du -h -c directory|tail -1
Isso irá gerar uma única linha com o uso da memória.
fonte
du -hs directory
se você quer apenas o total.Simplesmente imprima a linha atual que você está somando o total de:
fonte
com perl:
Tamanho de todos os arquivos PDF não ocultos no diretório atual.
fonte
Adicionar o seguinte a .bash_profile ou .bashrc funciona para mim.
Agora, quando eu faço um dir * .mp3, ele faz recursivamente e imprime o total no final. Você pode controlar a profundidade desejada, adicionando um parâmetro maxdepth à localização. Eu sei que executar encontrar duas vezes não é uma idéia muito eficaz. Mas eu não conseguia pensar em uma maneira melhor. Pelo menos, ele faz o trabalho.
fonte
Usar du e uma declaração awk como a mencionada acima fornecerá o que você está procurando.
Exemplo:
du /home/abc/Downloads/*.jpg | awk '{ print; total += $1 }; END { print "total size: ",total }'
Isso listará todos os arquivos na pasta Downloads do usuário abc que terminam em .jpg e imprime a soma de todos esses arquivos no final da listagem.
fonte
Para obter ambos, saída dir e cálculo de tamanho, sem usar nenhuma das outras opções propostas, você pode usar tee (1) e substituir o processo ...
fonte
tee
, apenasdir | awk '{print; total += $4}; END {print total}'
fonte
linux sum human readable sizes
e é o que estou procurando.fonte