Antworten:
Dies kann erfolgen mit find
:
find . -type f -size -1M -exec rm {} +
Beachten Sie, dass dies rekursiv in Unterverzeichnisse abfällt und bedingungslos alle Dateien löscht, die kleiner als 1 Megabyte sind. Achtung.
find
. :)
find
Beschränkt die Anzahl der Argumente auf den aufgerufenen Prozess, damit sie in die Systemgrenzen passen, im Gegensatz rm *
zu einem einzelnen Prozessaufruf. find
wird rm
bei Bedarf mehrere Instanzen von aufrufen . Und ich bin mir ziemlich sicher, dass Sonderzeichen, einschließlich Zeilenvorschubzeichen, korrekt behandelt werden. Ich ziehe es -exec rm
über -delete
aus Gründen der Flexibilität - als Beispiel, wobei die letzteren bietet keine Möglichkeit , zu löschen schreibgeschützte Dateien.
-1M
bedeutet weniger als ein Megabyte nach Wunsch. Ihre Version würde alle Dateien mit einer Größe von genau einem Megabyte löschen, was eine etwas sinnlose Operation zu sein scheint.
find . -type f -size +1M -exec rm {} +
. Beachten Sie die + 1M anstelle von -1M.
Dies sollte den Job machen:
$ find <directory> -type f -size -1M -delete
-
Zeichen ist ein Minuszeichen und bedeutet "weniger als 1M". Wenn Sie ausführen find <directory> -type f -size +1M -delete
, werden alle Dateien gelöscht, die größer als 1 MB sind.
Nur für Abwechslung und einen möglichen (wahrscheinlich marginalen) Leistungszuwachs:
find <directory> -type f -size -1M -print0 | xargs -0 rm
xargs
Prozess.
Sie können diesen Link http://ayaz.wordpress.com/2008/02/05/bash-quickly-deleting-empty-files-in-a-directory/ auschecken , es hat genau das, was Sie wollen.
for file in *;
do
file_size=$(du $file | awk '{print $1}');
if [ $file_size == 0 ]; then
echo "Deleting empty file $file with file size $file_size!";
echo "rm -f $file";
fi;
done
Sie können alle Dateien mit einer for-Schleife durchlaufen und dann mit du und awk die Dateigröße wie im obigen Beispiel ermitteln.
1M
.