Eu tenho um arquivo contendo uma lista de arquivos que gostaria de saber o tamanho total dos arquivos. Existe um comando para fazer isso?
Meu sistema operacional é um linux muito básico (Qnap TS-410).
EDITAR:
Algumas linhas do arquivo:
/ share / archive / Teste Bailey / BD006 / 0.tga
/ share / archive / Bailey / BD007 / 1 versão 1.tga
/ share / archive / Bailey 2 / BD007 / example.tga
Respostas:
Acredito que algo assim funcionaria no busybox:
Eu não tenho o mesmo ambiente que você, mas se você encontrar problemas com espaços nos nomes de arquivos, algo como isso também funcionaria:
Edit 1 :
@stew está certo em seu post abaixo, du mostra o uso do disco e não o tamanho exato do arquivo. Para alterar o comportamento, o busybox usa o sinalizador -a, então tente:
du -a "$file"
para o tamanho exato do arquivo e compare a saída / comportamento.fonte
/usr/bin/du: Argument list too long
(quase 80.000 linhas no meu arquivo). Seu segundo comando só me dá um prompt assim que eu pressiono enter, esperando por algo mais?cat tgafiles.txt | while read file;do du "$file" done | awk '{i+=$1} END {print i}'
. obrigado mattiascat tgafiles.txt | while read file;do du "$file";done | awk '{i+=$1} END {print i}'
(ou seja, antes de terminar).-c
adiciona a linha "tamanho total";tail -1
pega a última linha (com tamanho total);cut -f 1
corta a palavra "total".fonte
Não sei se suas ferramentas Linux são capazes disso, mas:
Sim, o xargs definirá o delimitador como um caractere de nova linha e du produzirá um total geral para você.
Olhando http://busybox.net/downloads/BusyBox.html , parece que o "busybox du" suportará a opção total geral, mas o "busybox xargs" não suportará delimitadores personalizados.
Novamente, não tenho certeza do seu conjunto de ferramentas.
fonte
xargs: invalid option -- d
-c
pois o xargs fará várias chamadas paradu
se a lista de arquivos for longa o suficiente, produzindo váriosdu
totais.Isso é semelhante à solução de Mattias Ahnberg. O uso de "read" contorna problemas com nomes de arquivos / diretórios com espaços. Eu uso em
stat
vez dedu
obter o tamanho do arquivo. du está obtendo a quantidade de espaço que está usando no disco, em vez do tamanho do arquivo, que pode ser diferente. Dependendo do seu sistema de arquivos, um arquivo de 1 byte ainda ocupará 4k no disco (ou qualquer que seja o tamanho do bloco). Portanto, para um arquivo de 1 byte, stat diz 1 byte e du diz 4k.fonte
stat
comando:stat: command not found
stat: applet not found
neste casoAqui está outra solução para o problema:
fonte
du -bc
corre muito mais rápido.Tente algo como isto:
Para lidar adequadamente com espaços nos caminhos:
fonte
find
?find
vez dofind
binário real .cat docs.txt | xargs -d \\n du -sk | awk '{total+=$1} END{print total}'
fonte