ausnahmefehler schrieb:
Ich habe eine Dateiliste mit ca. 10.000 Dateinamen und möchte diese auf einem Datenträger mit noch wesentlich mehr Dateien finden und falls sie existieren, löschen! 😉
Den Weg um die Liste einzulesen hat Dir redknight ja oben schon gezeigt: mit einer while read - Schleife.
Die hässlichen Win...- Zeilenenden musst Du tatsächlich beseitigen, damit er die Namen findet. Allerdings reicht dafür eine einfache Parameter Expansion.
Die find- Schleife hattest Du in Deinem Eingangspost schon angegeben.
Diese 3 Dinge müssen wir jetzt nur noch zusammenfügen und dabei sauber "quoten", dann sollte es gehen:
(dass die find- Schleife dann 10000 Mal aufgerufen wird, liegt in der Natur der Sache **)
| while read line ; do
find /mnt -name "${line%$'\r'}" -print0 | xargs -0 ls -hl
done < "/home/ich/textfile.txt"
|
Praktischerweise wirst Du zum löschen wahrscheinlich den -delete - Befehl von find benutzen ...
LG,
track
** Edit: Wenn das definitiv zu langsam ist, könntest Du es allenfalls anders herum machen: Du durchsuchst den Datenträger 1x, liest dabei alle Pfade in ein Array ein und filterst dann dieses Array anhand Deiner Liste. Also von der Reihenfolge her genau umgekehrt.
(allerdings bin ich mir nicht sicher, ob das wirklich was bringt, denn normalerweise cachet er die einmal gelesenen Pfade doch ...?! - es sein denn, er löscht den Cache jedes Mal beim Löschen von Dateien.)