find folder1 folder2 -iname '*.txt' -print0 | du --files0-from - -c -s | tail -1
Dadurch wird die Speicherplatznutzung in Byte nach Erweiterung gemeldet:
find . -type f -printf "%f %s\n" |
awk '{
PARTSCOUNT=split( $1, FILEPARTS, "." );
EXTENSION=PARTSCOUNT == 1 ? "NULL" : FILEPARTS[PARTSCOUNT];
FILETYPE_MAP[EXTENSION]+=$2
}
END {
for( FILETYPE in FILETYPE_MAP ) {
print FILETYPE_MAP[FILETYPE], FILETYPE;
}
}' | sort -n
Ausgabe:
3250 png
30334451 mov
57725092729 m4a
69460813270 3gp
79456825676 mp3
131208301755 mp4
Ganz einfach:
du -ch *.txt
Wenn Sie nur möchten, dass der gesamte belegte Speicherplatz angezeigt wird, dann:
du -ch *.txt | tail -1
Hier ist eine Möglichkeit, dies zu tun (unter Linux mit GNU Coreutils du
und Bash-Syntax), um schlechte Praktiken zu vermeiden:
total=0
while read -r line
do
size=($line)
(( total+=size ))
done < <( find . -iname "*.txt" -exec du -b {} + )
echo "$total"
Wenn Sie das aktuelle Verzeichnis ausschließen möchten, verwenden Sie -mindepth 2
mit find
.
Eine andere Version, die keine Bash-Syntax erfordert:
find . -iname "*.txt" -exec du -b {} + | awk '{total += $1} END {print total}'
Beachten Sie, dass diese nicht richtig mit Dateinamen funktionieren, die Zeilenumbrüche enthalten (aber solche mit Leerzeichen funktionieren).