Wenn Sie die Dateien so extrahiert haben, dass der Änderungszeitstempel im Archiv nicht in den extrahierten Kopien erhalten bleibt (die extrahierten Dateien haben jedoch die übliche Änderungszeit), können Sie dies über die Änderungszeit angreifen. Alle extrahierten Dateien haben einen neueren Änderungszeitstempel als die zuletzt geänderte vorhandene Datei in diesem Verzeichnis.
Hier ist eine einfache Situation.
Angenommen, keine der im aktuellen Verzeichnis vorhandenen Dateien wurde mindestens 24 Stunden lang berührt. Alles, was in den letzten 24 Stunden geändert wurde, ist daher Müll aus der Zip-Datei.
$ find . -mtime -1 -print0 | xargs -0 rm
Dadurch werden auch einige Verzeichnisse gefunden, die jedoch rm
in Ruhe gelassen werden. Sie können in einem zweiten Durchgang behandelt werden:
$ find . -mtime 1 -type d -print 0 | xargs -0 rmdir
Alle Verzeichnisse, die kürzlich geändert wurden, wurden vom zip geändert. Wenn sie rmdir
erfolgreich entfernt wurden, sind sie leer. Leere Verzeichnisse, die von zip berührt wurden, wurden wahrscheinlich von zip erstellt: dh kamen aus dem Archiv. Wir können nicht 100% sicher sein. Es ist möglich, dass beim Entpacken einige Dateien in ein vorhandenes Verzeichnis verschoben wurden, das leer war.
Wenn find
die 24-Stunden-Granularität für den Job nicht ausreicht, weil die Dateien im Baum zu spät geändert wurden, würde ich als Nächstes etwas Einfaches betrachten: Angenommen, der Entpack-Job hat nichts in vorhandene Unterverzeichnisse verschoben. Das heißt, alles, was entpackt wurde, ist entweder eine Datei auf der obersten Ebene oder ein neues Unterverzeichnis, das vorher nicht vorhanden war und daher nichts als Material aus dem Zip enthält. Dann:
# list directory in descending order of modification time
$ ls -1t > filelist # descending order of modification time
Nun öffnen wir uns filelist
in einem Texteditor und ermitteln den ersten Eintrag in der Liste, der nicht aus der zip stammt. Wir löschen diesen Eintrag und alles andere danach. Was bleibt, sind die Dateien und Verzeichnisse, die aus dem Zip stammen. Zunächst untersuchen wir visuell, ob Leerzeichen in den Namen oder Anführungszeichen vorhanden sind, die maskiert werden müssen. Bei Bedarf können wir dann alles in Anführungszeichen setzen: Im Folgenden wird davon ausgegangen, dass Sie Vim verwenden:
:%s/.*/"&"/
Dann verbinde alles zu einer großen Linie:
:%j
Fügen Sie nun rm -rf
davor ein:
Irm - rf<ESC>
Führen Sie die Zeile unter dem Cursor als Shell-Befehl aus:
!!sh<Enter>
Auf jeden Fall würde ich die Schritte dieser Aufgabe nicht automatisieren, da die Gefahr besteht, dass bereits vorhandene Dateien gelöscht oder aufgrund von Dateinamenproblemen Fehler gemacht werden.
Wenn Sie den naheliegenden Weg gehen, eine Liste der Pfade in der ZIP-Datei zu erhalten, erfassen Sie diese in einer Datei, überprüfen Sie sie sorgfältig und wandeln Sie sie nach der erforderlichen Bearbeitung in eine Löschung um.
lq
Optionen für nichtunzizp
, ich habe nur einige klassische * nix-Tricks um seine Hauptantwort hinzugefügt.