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
-s
ist wie-d0
und fasst nur eine Gesamtsumme für jedes Argument zusammen.-c
berechnet eine Gesamtsumme.-h
macht das alles in einem für Menschen lesbaren Format.--files0-from=dirs.txt
liest 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
find
In Kombination mit verwenden du
und 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 sudo
Zugriff, 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 du
einem Befehl wie diesem ermitteln:
du -h -d 1 "path to parent directory"
-D:die Tiefe der Unterverzeichnisse