Ich habe ein Datengenerierungsskript zu lange laufen lassen und habe jetzt mehr als 200.000 Dateien, die ich auf etwa 1000 reduzieren muss. Über die Linux-Befehlszeile gibt es eine einfache Möglichkeit, alle bis auf 1000 dieser Dateien zu löschen, wobei die Dateien beibehalten werden hätte keine Abhängigkeit von Dateinamen oder einem anderen Attribut?
13
Antworten:
Löschen Sie alle bis auf 1000 zufälligen Dateien in einem Verzeichnis
Code:
Erläuterung:
/path/to/dir
mit auffind
;print0
: benutze\0
( Nullzeichen ) als Zeilenbegrenzer; Dateipfade mit Leerzeichen / Zeilenumbrüchen unterbrechen das Skript also nichtsort
;-z
: Verwenden Sie\0
(Nullzeichen) als Trennzeichen anstelle von\n
(eine neue Zeile)-R
: zufällige Reihenfolgetail
;-z
: Behandle die Liste als nullbegrenzt (wie beisort
)-n +1001
: Zeilen ab 1001 anzeigen (dh erste 1000 Zeilen weglassen)xargs -0 rm
- die restlichen Dateien entfernen;-0
: wieder nullbegrenztWarum ist es besser als die Lösung von Quixotic *:
find
.find
nicht mit\n
(newline) endet.* - Kredit quixotic für
| sort -R | head -1000
, gab mir einen Ausgangspunkt.quelle
find . -type f | sort -R | tail -n +1001 | xargs rm
find
? Ich werde versuchen, meine Antwort zu verbessern, brauche nur etwas Input, um damit zu arbeiten.tail: invalid option -- 'z'
Die Version von Schwanz, die ich habe, ist 8.4Verwenden Sie ein temporäres Verzeichnis, dann
find
alle Ihre Dateien, sortieren Sie die Listesort
nach dem Zufallsprinzip und verschieben Sie die obersten 1000 der Liste in das temporäre Verzeichnis. Löschen Sie den Rest und verschieben Sie die Dateien aus dem temporären Verzeichnis zurück.Wenn Sie
xargs
sich über die Zeilenlänge beschweren, verwenden Sie eine kleinere Zahl mithead
und wiederholen Sie den Befehl nach Bedarf (dh wechseln Sie-1000
zu-500
und führen Sie ihn zweimal aus oder wechseln Sie zu-200
und führen Sie ihn fünfmal aus.)Es kann auch keine Dateinamen verarbeiten, die Leerzeichen enthalten. wie @ Antwort des rld zeigt, können Sie
find
‚s-print0
Argument, die-z
Argumentesort
undhead
, und-0
mitxargs
zu richtigen Dateinamen Handhabung zu gewährleisten.Wenn das
tmp-dir
bereits vorhanden ist, sollten Sie einen Verzeichnisnamen ersetzen, der nicht vorhanden ist.quelle
find
ein Leerzeichen enthält.Für Mac-Benutzer sollte das folgende Skript ausreichen.
tr
ermöglicht es sort und tail, Listen mit\n
statt zu bearbeiten\0
.quelle
Am einfachsten ist es, das Verzeichnis rm -rf zu erstellen und dann das Datengenerierungsskript erneut auszuführen, ohne darauf zu achten, dass es zu lange ausgeführt wird.
quelle