Comencé hace unas semanas con la programación bash de Linux, pero estoy luchando con un problema: ¿Cómo puedo obtener el tamaño de varios directorios (ruta guardada en un archivo .txt) y luego escribir en otro archivo, la ruta del directorio, seguida? por tamaño y el tamaño total que ocupan esos directorios. Ya probé esto, pero no estoy seguro:
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"
Gracias de antemano (y perdón por el mal inglés)
Respuesta1
Al tratar con archivos o directorios por su nombre, recomiendo tratarlos separados por el carácter nullbyte, no por una nueva línea. Porque oficialmente un nombre de archivopodercontener una nueva línea. Por lo tanto, no debes hacer una lista de directorios separados por una nueva línea.
De todos modos, cuando tengas esta lista puedes usar esto:
du -sch --files0-from=dirs.txt
-s
es como-d0
y solo resumirá un total para cada argumento.-c
calcula un total general.-h
hace todo eso en formato legible por humanos.--files0-from=dirs.txt
lee los nombres de archivos/directorios del archivo dado terminado en nullbyte.
Con su lista, debería verse así (pero con el problema de los nombres de archivos con nuevas líneas):
tr '\n' '\0' <dirs.txt | du -sch --files0-from=-
Respuesta2
Usar find
combinado con du
y redirigir al archivo con>
sudo find /path/to/topDir -maxdepth 1 -type d -exec du -sh {} \; > output.txt
Ejemplo:
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 proporcione uso de disco para directorios específicos de la lista, lo que puede hacer es combinar cat y xargs con el comando anterior. Por ejemplo,
cat dirList.txt | xargs -I dir sudo find dir -maxdepth 0 -type d -exec du -sh {} \;
Algunos directorios de los cuales no eres propietario requieren sudo
acceso para enumerar el uso de su disco, por lo tanto, combínalo con sudo sh -c
. Déjame demostrarte,
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
Respuesta3
Puede obtener el tamaño de los directorios con du
un comando como este:
du -h -d 1 "path to parent directory"
-d:la profundidad de los subdirectorios