Bash Script - Como posso obter o tamanho dos diretórios no arquivo .txt e salvá-los em outro arquivo?

Bash Script - Como posso obter o tamanho dos diretórios no arquivo .txt e salvá-los em outro arquivo?

Comecei há algumas semanas com a programação bash do Linux, mas estou lutando com um problema: como posso obter o tamanho de vários diretórios (caminho salvo em um arquivo .txt) e depois escrever em outro arquivo, o caminho do diretório, seguido por tamanho e o tamanho total ocupado por esses diretórios. Já tentei isso, mas não tenho certeza:

totsize=0
while read -r diretory; do
   size=$(du -ch "$directory")
   echo "$diretory size: $size" > "$homedir/$filename2"
   $totsize += $(du -c "$homedir/$diretorio")
done < "$homedir/diretories.txt"
sudo echo "total size: $totsize" >> "$homedir/$filename2"

Agradecemos antecipadamente (e desculpe pelo mau inglês)

Responder1

Ao lidar com arquivos ou diretórios por seus nomes, recomendo enfaticamente tratá-los separados pelo caractere nullbyte, não por uma nova linha. Porque oficialmente um nome de arquivopodecontém uma nova linha. Portanto, você não deve fazer uma lista dos diretórios separados por uma nova linha.

De qualquer forma, quando você tiver essa lista, basta usar isto:

du -sch --files0-from=dirs.txt
  • -sé semelhante -d0e resumirá apenas um total para cada argumento.
  • -ccalcula um total geral.
  • -hfaz tudo isso em formato legível por humanos.
  • --files0-from=dirs.txtlê os nomes de arquivos/diretórios do arquivo fornecido terminado por nullbyte.

Com a sua lista, seria parecido (mas com a armadilha dos nomes de arquivos com novas linhas):

tr '\n' '\0' <dirs.txt | du -sch --files0-from=-

Responder2

Use findcombinado com due redirecione para arquivo com>

sudo find /path/to/topDir -maxdepth 1 -type d  -exec du -sh {} \;  > output.txt

Exemplo:

xieerqi:$ sudo find Desktop -maxdepth 1 -type d  -exec du -sh {} \; > outputFile1.txt                                                            
[sudo] password for xieerqi: 

xieerqi:$ cat outputFile1.txt                                                                                                                    
2.7G    Desktop
69M Desktop/linux-kernel-4.1.0
1.1M    Desktop/DOCS
6.8M    Desktop/The comments that became a reporter’s death sentence | New York Post_files
4.0K    Desktop/newdir
6.7M    Desktop/IMAGES
12M Desktop/TIRES
504K    Desktop/MSU-TEMPLATES
341M    Desktop/PDFS
19M Desktop/java

Para que este comando forneça uso de disco para diretórios específicos de list , o que você pode fazer é combinar cat e xargs com o comando acima. Por exemplo,

 cat dirList.txt | xargs -I dir sudo find dir -maxdepth 0 -type d  -exec du -sh {} \; 

Alguns diretórios dos quais você não é proprietário exigem sudoacesso para listar o uso do disco, portanto, combine isso com sudo sh -c. Deixe-me demonstrar,

xieerqi:$ sudo sh -c "cat dirList.txt | xargs -I dir find dir -maxdepth 0 -type d  -exec du -sh {} \+"                                           
[sudo] password for xieerqi: 
2.7G    /home/xieerqi/Desktop
11M /bin
5.5G    /usr

xieerqi:$ cat dirList.txt                                                                                                                        
/home/xieerqi/Desktop
/bin
/usr

Responder3

Você pode obter o tamanho dos diretórios com duum comando como este:

du -h -d 1 "path to parent directory"

-d:a profundidade dos subdiretórios

informação relacionada