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-d0
e resumirá apenas um total para cada argumento.-c
calcula um total geral.-h
faz tudo isso em formato legível por humanos.--files0-from=dirs.txt
lê 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 find
combinado com du
e 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 sudo
acesso 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 du
um comando como este:
du -h -d 1 "path to parent directory"
-d:a profundidade dos subdiretórios