Antworten:
Hier ist eine einfache Lösung in bash, die die Größe von Dateien und Ordnern analysiert:
#!/bin/bash
folder="$1"
limit="$2"
IFS=$'\n'
for item in `find "$folder"`; do
size=$(du -s "$item" | cut -f1)
if [ $size -gt $limit ]; then
echo $item
fi
done
Der erste Parameter ist der zu untersuchende
Zielordner. Der zweite Parameter ist die Grenze in Kilobyte, wobei 1 KB = 1024 Byte ist.
./findLargeItems.sh ~/Music 10000
. Vergessen Sie nicht, darin Pfad- oder Backslash-Leerzeichen anzugeben: "/home/user/random folder"
oder / home / user / random \ folder. Ich denke, Sie wissen das alles, aber nur für den Fall.
find /home/stephenm/ -maxdepth 1 -size +20k -exec du -h {} \;
Das sollte alles über 20.000 in / home / stephenm auflisten
Um in Subdirektoren zurückzukehren, lassen Sie die -maxdepth 1
Option fallen.
man find
einmal durchlesen .
Seien Sie vorsichtig: du
Druckt nicht die Größe einer Datei, sondern gibt Ihnen eine Schätzung der Speicherplatznutzung.
Sie können eine 10-MB-Datei erstellen, die viel weniger verbraucht:
dd if=/dev/zero of=file seek=10M count=1 bs=1
stat -c %s file
ls -lh file
du -h file
cat file | wc
Ein Beispiel ist eine komprimierte Datei, die weniger Speicherplatz auf der Festplatte benötigt als ihre Größe, wie im obigen Beispiel einer Datei mit geringer Dichte .
Im obigen Beispiel find . -type f -size +5M
wird die Ausgabe file
auch dann ausgegeben , wenn sie du
viel weniger als 5 MB beträgt.
Wenn Sie wissen, dass Ihre Dateinamen keine Zeilenumbrüche enthalten, können Sie die Ausgabe von filtern find
mit:
find . -type f -size +5M | while IFS= read -r file; do
du=$(du -k "$file")
size="${du%%$(printf "\t")*}"
if test $size -gt $((5 * 1024)); then
echo "$file"
fi
done
Wenn Ihre Dateinamen Zeilenumbrüche enthalten können, können Sie diese GNU-Erweiterung verwenden, aber dann etwas anderes als echo
in der Schleife verwenden:
find . -type f -size +5M -print0 | while IFS= read -r -d '' file; do
du=$(du -k "$file")
size="${du%%$(printf "\t")*}"
if test $size -gt $((5 * 1024)); then
echo "$file"
fi
done
du --apparent <file>
In diesem Fall ist die gemeldete Größe dieselbe wie mit ls
.
find /path -type f -size +5M -exec ls -lh {} \;