Bash Script: ¿Cómo puedo obtener el tamaño de los directorios en un archivo .txt y guardarlos en otro archivo?

Bash Script: ¿Cómo puedo obtener el tamaño de los directorios en un archivo .txt y guardarlos en otro archivo?

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
  • -ses como -d0y solo resumirá un total para cada argumento.
  • -ccalcula un total general.
  • -hhace todo eso en formato legible por humanos.
  • --files0-from=dirs.txtlee 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 findcombinado con duy 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 sudoacceso 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 duun comando como este:

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

-d:la profundidad de los subdirectorios

información relacionada