Das Problem: ich habe einen Haufen doppelte Dateien in zwei ähnlichen (aber nicht identischen) Verzeichnisbäumen. Teilweise sind identische Daten innerhalb desselben Pfades. Die Verzeichnisse enthalten jeweils ca. 15,000 Dateien (2 GB). findup (http://man.cx/fslint) erzeugt ein Listing von identischen Dateien aus zwei Verzeichnisbäumen: /usr/share/fslint/fslint/findup pfad1 pfad2 pfad1/datei1_1 pfad2/datei1_2 pfad1/datei2_1 pfad2/datei2_2 Ich möchte erstmal alle Dateien in pfad2 löschen, die auch in pfad1 vorkommen. Am Ende soll nur noch pfad1 existieren, mit allen 'einzigartigen' Dateien. Dazu könnte man alle Zeilen heraussuchen, die auf eine Zeile mit pfad1 folgen, die auf eine Leerzeile folgt. Dazu ist grep (http://man.cx/grep) wohl das Mittel der Wahl. Anschliessend diese Dateien löschen. Fragen: Ist das Vorgehen nachvollziehbar - gibt es einen besseren Weg? Wie lautet der reguläre Ausdruck? Irgendwas mit $.+pfad1.+\n.+pfad2
> Wie lautet der reguläre Ausdruck? Irgendwas mit $.+pfad1.+\n.+pfad2
Nein, das geht so leider nicht. grep wendet den regulären Ausdruck
zeilenweise an, du kannst deswegen nicht mehrere Zeilen auf einmal
matchen.
Ich würde einfach grep 'pfad2' machen. Die Leerzeilen und die Zeilen,
die Pfad1 enthalten, werden damit ignoriert, und alle Zeilen die Pfad2
enthalten werden ausgegeben.
Dann könnte der Befehl z.B. so aussehen:
grep -e "regex" "dateiliste.txt" | xargs -d '\n' rm
Um zu sehen, was gelöscht werden würde, kannst du das letzte "rm" z.B.
durch "echo" ersetzen.
Wenn das wirklich nur zeilenweise klappt, muss ich einen anderen Weg finden. Wenn ich jede gefundene Datei aus pfad2 lösche, kann es ja auch sein, dass diese Datei nur doppelt in pfad2 liegt, aber gar nicht in pfad1.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.