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 1Option fallen.
man findeinmal durchlesen .
Seien Sie vorsichtig: duDruckt 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 +5Mwird die Ausgabe fileauch dann ausgegeben , wenn sie duviel weniger als 5 MB beträgt.
Wenn Sie wissen, dass Ihre Dateinamen keine Zeilenumbrüche enthalten, können Sie die Ausgabe von filtern findmit:
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 echoin 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 {} \;