Bash-Skript – Wie kann ich die Größe von Verzeichnissen in einer TXT-Datei ermitteln und sie in einer anderen Datei speichern?

Bash-Skript – Wie kann ich die Größe von Verzeichnissen in einer TXT-Datei ermitteln und sie in einer anderen Datei speichern?

Ich habe vor ein paar Wochen mit der Linux-Bash-Programmierung begonnen, aber ich kämpfe mit einem Problem: Wie kann ich die Größe mehrerer Verzeichnisse ermitteln (Pfad in einer TXT-Datei gespeichert) und dann den Verzeichnispfad, gefolgt von der Größe und der Gesamtgröße dieser Verzeichnisse, in eine andere Datei schreiben? Ich habe dies bereits versucht, bin mir aber nicht sicher:

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"

Vielen Dank im Voraus (und entschuldigen Sie mein schlechtes Englisch)

Antwort1

Wenn Sie Dateien oder Verzeichnisse anhand ihres Namens behandeln, empfehle ich dringend, sie durch das Nullbyte-Zeichen und nicht durch eine neue Zeile zu trennen. Denn offiziell ist ein Dateinamedürfenenthalten eine neue Zeile. Sie sollten daher keine Liste der Verzeichnisse erstellen, die durch eine neue Zeile getrennt sind.

Wie dem auch sei, wenn Sie diese Liste haben, können Sie einfach Folgendes verwenden:

du -sch --files0-from=dirs.txt
  • -sist wie -d0und fasst nur eine Gesamtsumme für jedes Argument zusammen.
  • -cberechnet eine Gesamtsumme.
  • -hmacht das alles in einem für Menschen lesbaren Format.
  • --files0-from=dirs.txtliest die Dateinamen/Verzeichnisnamen aus der angegebenen Datei, beendet durch ein Nullbyte.

Mit Ihrer Liste würde es so aussehen (aber mit der Falle von Dateinamen, die Zeilenumbrüche enthalten):

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

Antwort2

findIn Kombination mit verwenden duund zur Datei umleiten mit>

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

Beispiel:

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

Damit dieser Befehl die Festplattennutzung für bestimmte Verzeichnisse aus der Liste angibt, können Sie cat und xargs mit dem obigen Befehl kombinieren. Beispiel:

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

Einige Verzeichnisse, deren Eigentümer Sie nicht sind, erfordern sudoZugriff, um deren Festplattennutzung aufzulisten. Kombinieren Sie dies daher mit sudo sh -c. Lassen Sie mich demonstrieren,

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

Antwort3

Sie können die Größe von Verzeichnissen mit dueinem Befehl wie diesem ermitteln:

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

-D:die Tiefe der Unterverzeichnisse

verwandte Informationen