Alle bis auf 1000 zufällige Dateien in einem Verzeichnis löschen
Code:
find /path/to/dir -type f -print0 | sort -zR | tail -zn +1001 | xargs -0 rm
Erklärung:
- Alle Dateien in
/path/to/dir
auflisten mitfind
;print0
:Verwenden Sie\0
(Nullzeichen ) als Zeilentrennzeichen; damit Dateipfade, die Leerzeichen/Zeilenumbrüche enthalten, das Skript nicht beschädigen
- Mischen Sie die Dateiliste mit
sort
;-z
:Verwenden Sie\0
(Nullzeichen) als Trennzeichen, statt\n
(ein Zeilenumbruch)-R
:zufällige Reihenfolge
- Entfernen Sie die ersten 1000 Zeilen aus der randomisierten Liste mit
tail
;-z
:Behandle die Liste als durch Null getrennt (wie beisort
)-n +1001
:Zeilen ab 1001 anzeigen (dh die ersten 1000 Zeilen weglassen)
xargs -0 rm
- Entfernen Sie die verbleibenden Dateien;-0
:wieder nullbegrenzt
Warum es besser ist als die Lösung von Quixotic*:
- Funktioniert mit Dateinamen, die Leerzeichen/Zeilenumbrüche enthalten.
- Versucht nicht, Verzeichnisse zu erstellen (die übrigens bereits existieren könnten)
- Verschiebt keine Dateien, berührt nicht einmal die 1000 "Glücksdateien", außer dass sie mit
find
aufgelistet werden . - Vermeidet das Fehlen einer Datei im Falle der Ausgabe von
find
endet nicht mit\n
(newline) aus irgendeinem Grund.
* - Dank an Quixotic für | sort -R | head -1000
, gab mir einen Ausgangspunkt.