Hallo,
hatte gestern ein wenig Pech mit der Installation des Gnome-Desktop und würde die Installation gerne Rückgängig machen. Nun habe ich einige Paketlisten welche bei jedem Backup automatisch angelegt werden und eine von Heute, welche ich gerne mit der vom letzten Freitag vergleichen würde um die Differenz zu deinstallieren.
Allerdings habe ich keine Ahnung wie man Dateien zeilenweise vergleicht und das Ergebnis bzw. die Differenz in eine neue Datei schreibt.
vielen Dank schon mal
Wie kann man Textdateien zeilenweise vergleichen?
![]() Anmeldungsdatum: Beiträge: 869 |
|
||||
![]() Anmeldungsdatum: Beiträge: 1811 Wohnort: Ruhrpott |
Moin, man diff |
||||
Anmeldungsdatum: Beiträge: 279 Wohnort: Elmshorn |
am einfachsten und schnellsten scheint mir allerdings: comm --help Ist sicherlich nicht so mächtig wie diff dafür aber übersichtlich in der Bedienung |
||||
(Themenstarter)
![]() Anmeldungsdatum: Beiträge: 869 |
Herzlichen Dank für die Tips - habe es mit diff hinbekommen diff /mnt/backup/Paketlisten/neu.list /mnt/backup/Paketlisten/alt.list > /mnt/backup/Paketlisten/differenz.list Dann habe ich die Ausgabe von Hand (ca 400 Zeilen) nachbearbeitet, so dass ich eine In- als auch Deinstallations-Liste bekommen habe - dann weiter mit: xargs -a "/mnt/backup/Paketlisten/deinstall.list" sudo apt-get remove --purge xargs -a "/mnt/backup/Paketlisten/install.list" sudo apt-get install sudo apt-get clean So weit so gut - allerdings frage ich mich ob es irgendwie möglich wäre, die Ausgabe von diff mit einem Schell-Script automatisch auf zwei Dateien zu verteilen. So dass in der einen Datei nur Paket-Namen stehen welche nur in der alten Liste vorhanden sind, und umgekehrt... |
||||
![]() Anmeldungsdatum: Beiträge: 479 |
öh...das hängt nun davon ab, wie die Dateien aussehen? mach doch mal Beispieldateien für neu.list und alt.list (je so ca. 5 Zeilen oder wieviele nötig sind, um das Problem am kürzesten zu beschreiben) |
||||
(Themenstarter)
![]() Anmeldungsdatum: Beiträge: 869 |
Paketliste (alt) akregator amarok amarok-engines amarok-xine
akregator alsa-base alsa-oss alsa-utils kdegames kdegames-card-data kdegraphics-kfile-plugins kdelibs-data kdelibs4c2a kdemultimedia-kfile-plugins kdemultimedia-kio-plugins Die Original-Dateien sind wesentlich länger (ca 1200 Zeilen) - Ich verwende ein modifiziertes Backup-Script welches bei jedem Backup auch eine Liste mit den jeweils installierten Paketen erstellt. Die Ausgabe der Differenzen sieht dann wenn man diff verwendet in etwa so aus: user@k-office:~$ diff /mnt/backup/Paketlisten/liste.alt /mnt/backup/Paketlisten/liste.neu 2,4c2,11 < amarok < amarok-engines < amarok-xine --- > alsa-base > alsa-oss > alsa-utils > kdegames > kdegames-card-data > kdegraphics-kfile-plugins > kdelibs-data > kdelibs4c2a > kdemultimedia-kfile-plugins > kdemultimedia-kio-plugins user@k-office:~$ Die geschlossenen spitzen Klammern zeigen an, dass diese Zeile in der zweiten Datei hinzugefügt wurde. Man müsste also zunächst die Zeilen anhand der spitzen Klammern auf zwei Text-Dateien verteilen, wobei Zeilen mit Kommata oder drei aufeinander folgenden Bindestrichen ausgelassen werden müssten. |
||||
![]() Anmeldungsdatum: Beiträge: 479 |
dann greppe die zeilen halt da raus: grep "^<" bzw. grep "^>" und dann einfach mittels awk oder sed den passenden Teil rausschneiden ...| sed 's/^. //' # oder ... | awk {print $2} |
||||
(Themenstarter)
![]() Anmeldungsdatum: Beiträge: 869 |
Danke, grep und sed brachten mich auf den richtigen Weg:
Noch eine Frage: |
||||
![]() Anmeldungsdatum: Beiträge: 927 Wohnort: München |
Die Aufrufparameter stehen in |
||||
(Themenstarter)
![]() Anmeldungsdatum: Beiträge: 869 |
Jetzt ist ich mein Script fertig. Es vergleicht eine zu einem früheren Zeitpunkt angelegte Paket-Liste mit den aktuell installierten Paketen - anschließend werden die Unterschiede analysiert und auf eine Installationsliste als auch eine Deinstallationsliste verteilt. Diese Differenzlisten werden genutzt um das System in Bezug auf die installierten Pakete zurückzusetzen. Wenn es jemand gebrauchen kann:
Aber ohne eine Liste welche alle zu einem bestimmten Zeitpunkt installierten Pakete enthält, ist das Script natürlich sinnlos Das zweite Script legt eine der zur Wiederherstellung benötigten Listen an - man könnte diesen Code zur Listenerstellung z.B. in ein Backup-Script einfügen.
|