ubuntuusers.de

7z

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |
Dieses Thema ist die Diskussion des Artikels 7z.

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9564

Wohnort: Münster

kB schrieb:

[…]

Aber die Original-Manpage weist die Syntax wie folgt aus:

-u[-][p#][q#][r#][x#][y#][z#][!newArchiveName]
              Update options

Schon besser. Ob für das Wiki tauglich, darüber denke ich noch nach.

Daraus ist eine Expertenbox geworden.

[…] Ich arbeite die bisherigen Erkenntnisse ein und melde mich dann wieder.

Damit bin ich jetzt weitgehend fertig. Lediglich die Formatierung der Tabelle 5 gefällt mir noch nicht.

Bevor wir uns ggf. in kosmetische Formatierungsorgien stürzen, bitte noch einmal kritisch den jetzigen Text inhaltlich prüfen!

wxpte

Anmeldungsdatum:
20. Januar 2007

Beiträge: 1388

kB schrieb:

Bevor wir uns ggf. in kosmetische Formatierungsorgien stürzen, bitte noch einmal kritisch den jetzigen Text inhaltlich prüfen!

Zur inhaltlichen Kritik siehe hier. Außerdem noch: Situationscode p im Dateisystem nicht relevant? Meines Erachtens ist das sogar sehr relevant, da die Shell die Wildcards im Dateisystem erst auflöst und daraus ein Muster zur Prüfung der im Archiv befindlichen Dateien erzeugt.

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9564

Wohnort: Münster

wxpte schrieb:

[…] Mit einigen anderen Passagen bin ich allerdings noch nicht so glücklich:

Außerdem kann man über die Zeichenfolge ARBEITSWEISEN die vorgegebene situationsabhängigen Arbeitsweisen löschen und einen neuen zusätzlichen Archivnamen definieren.

und

Vorgaben für das jeweilige Kommando lt. Tabelle 5 löschen.

Wieso löschen? Der Schalter -u- legt fest, dass das Kommando nicht auf die vorhandene Archivdatei angewendet wird, wenn gleichzeitig ein weiterer Schalter gesetzt ist, mit dem eine neue Archivdatei erzeugt wird. Wenn aber ein Kommando gar nicht erst angewendet wird, dann brauchen auch keine Vorgaben gelöscht zu werden.

Dieser Code muss an erster Stelle stehen.

Das trifft in dieser Form nicht zu: innerhalb eines Schalters muss der Code vielmehr alleinstehend sein. Anweisungen für die neue Archivdatei und Anweisungen für die vorhandene Archivdatei kann man nicht in einem Schalter miteinander kombinieren.

Deine Ausführungen zeigen mir, dass wir beide kein übereinstimmendes Verständnis der Arbeitsweise des Programms und insbesondere über die Wirkung es Schalters -u entwickelt haben. Ich halte Deine Auffassung und Deine vorstehenden Ausführungen für fehlerhaft.

Meine Auffassung beruht aber lediglich auf der verfügbaren Dokumentation. Ich habe nichts ausprobiert und werde mir dieses Programm mit seiner teuflischen Notation auch nicht installieren.

Meine Erkenntnisse:

  • Es kann mehrere Archivdateien geben, die mit einem Aufruf gleichzeitig bearbeitet werden.

  • Es muss (jedenfalls für die Kommandos a, d und u) ein Archiv geben, welches jetzt im Text als ARCHIVNAME adressiert wird. Dieses wird außerhalb eines Schalters -u angegeben und dient als Eingabe (!) und optional auch als Ausgabe.

  • Es kann beliebig viele weitere Archive geben, die mit Schaltern -u angegeben werden können und nur als Ausgabe dienen. Solche werden im Text mit NEUER-ARCHIVNAME bezeichnet.

  • Die Angaben jedes Schalters -u sind nicht kumulativ, sondern beschreiben jeweils die Arbeitsweise für einen von ggf. mehreren Ausgabeströmen.

  • Wenn ein Schalter -u kein Ziel definiert, dann (nur dann) dient auch die Eingabedatei ARCHIVNAME als Ausgabedatei.

  • Die Kommandos a, d und u sind im wesentlichen ein und dasselbe und unterscheiden sich nur durch die interne Vorgabe eines Schalters -u mit für das Kommando spezifischen ARBEITSWEISEN lt. Tabelle 5.

  • Der Code Bindestrich - in ARBEITSWEISEN löscht die für das Kommando spezifische Vorgabe für ARBEITSWEISEN, d.h. er ist eine Abkürzung für p0q0r0x0y0z0w0. Er kann natürlich auch allein stehend verwendet werden und das ist auch sinnvoll um indirekt eine Arbeitsweise für die Eingabe ARCHIVNAME festzulegen:

    • Indem man im Schalter -u keinen NEUER-ARCHIVNAME angibt, wird ARCHIVNAME als Ausgabe für diesen Schalter definiert.

    • Der Code - besagt dann: Schreibe niemals etwas in diesen Ausgabestrom. Damit bleibt das ursprüngliche Archiv unverändert.

  • Ich sehe aber keinen Grund, warum man den Code - nicht mit weiteren Codes kombinieren können sollte.

Vorstehendes ergibt sich für mich aus der Dokumentation und ist – wie bereits gesagt - nicht durch eigene Experimente abgesichert.

Der Satz

Für jede Datei im Archiv ARCHIVNAME und jede auf MUSTER passende Datei im Dateisystem wird dann die Situation lt. Tabelle 3 hinsichtlich Existenz an beiden Stellen, Zeitstempel und Größe ermittelt und die Datei dann gemäß Tabelle 4 behandelt.

ist mir zu kompliziert. Obwohl ich mich eine ganze Weile mit dem Schalter beschäftigt habe und mir einbilde, die wesentlichen Eigenschaften verstanden zu haben, musste ich diesen Satz fünf Mal lesen, um einigermaßen zu durchschauen, worauf du damit hinaus willst.

Mein Satz ist eine kompakte Formulierung meines hier vorstehend beschriebenen Verständnisses der Programmfunktion. Vielleicht zu knapp.

wxpte

Anmeldungsdatum:
20. Januar 2007

Beiträge: 1388

kB schrieb:

Ich halte Deine Auffassung und Deine vorstehenden Ausführungen für fehlerhaft.

Meine Auffassung beruht aber lediglich auf der verfügbaren Dokumentation. Ich habe nichts ausprobiert und werde mir dieses Programm mit seiner teuflischen Notation auch nicht installieren.

Das halte ich ja schon für ein bisschen anmaßend. Gerade weil du nichts selbst ausprobiert hast, solltest du dein eigenes Verständnis vielleicht einmal ein wenig selbstkritisch hinterfragen.

kB schrieb:

Meine Erkenntnisse:

  • Es kann mehrere Archivdateien geben, die mit einem Aufruf gleichzeitig bearbeitet werden.

Korrekt. Jede neu zu erstellende Archivdatei wird dabei an einem eigenen Schalter -u gekoppelt.

kB schrieb:

  • Es muss (jedenfalls für die Kommandos a, d und u) ein Archiv geben, welches jetzt im Text als ARCHIVNAME adressiert wird. Dieses wird außerhalb eines Schalters -u angegeben und dient als Eingabe (!) und optional auch als Ausgabe.

Genau: die vorhandene Archivdatei ist gleichsam die Referenz, anhand derer der Abgleich mit dem Dateisystem erfolgt. Darauf basierend können dann – auch – weitere Archivdateien erstellt werden.

kB schrieb:

  • Es kann beliebig viele weitere Archive geben, die mit Schaltern -u angegeben werden können und nur als Ausgabe dienen. Solche werden im Text mit NEUER-ARCHIVNAME bezeichnet.

  • Die Angaben jedes Schalters -u sind nicht kumulativ, sondern beschreiben jeweils die Arbeitsweise für einen von ggf. mehreren Ausgabeströmen.

  • Wenn ein Schalter -u kein Ziel definiert, dann (nur dann) dient auch die Eingabedatei ARCHIVNAME als Ausgabedatei.

  • Die Kommandos a, d und u sind im wesentlichen ein und dasselbe und unterscheiden sich nur durch die interne Vorgabe eines Schalters -u mit für das Kommando spezifischen ARBEITSWEISEN lt. Tabelle 5.

Soweit keine Einwände.

kB schrieb:

  • Der Code Bindestrich - in ARBEITSWEISEN löscht die für das Kommando spezifische Vorgabe für ARBEITSWEISEN, d.h. er ist eine Abkürzung für p0q0r0x0y0z0w0. Er kann natürlich auch allein stehend verwendet werden und das ist auch sinnvoll um indirekt eine Arbeitsweise für die Eingabe ARCHIVNAME festzulegen:

Und hier liegst du definitiv falsch:

  1. Der Aktionscode 0 bedeutet, dass die Dateien aus der Archivdatei entfernt werden. Mit dem - soll aber der Inhalt der vorhandenen Archivdatei unverändert bleiben, also müsste der Aktionscode auch durchgängig 1 lauten. Den Situationscodes jeweils einen bestimmten durchgängigen Aktionscode zuzuordnen ist auch kein »Löschen« in irgendeiner Form.

  2. Es ist widersprüchlich, dem Programm zunächst mitzuteilen, dass die vorhandene Archivdatei nicht verändert werden soll, um dann im Anschluss doch Änderungen für bestimmte Situationen vorzunehmen

kB schrieb:

  • Indem man im Schalter -u keinen NEUER-ARCHIVNAME angibt, wird ARCHIVNAME als Ausgabe für diesen Schalter definiert.

  • Der Code - besagt dann: Schreibe niemals etwas in diesen Ausgabestrom. Damit bleibt das ursprüngliche Archiv unverändert.

  • Ich sehe aber keinen Grund, warum man den Code - nicht mit weiteren Codes kombinieren können sollte.

Der Grund ist recht banal: es funktioniert nicht. Gerade habe ich versucht, mit den Aufrufen

7z u -u-'!/Pfad/zur/Neudatei.7z' /Pfad/zur/Altdatei.7z *
7z u -u'-!/Pfad/zur/Neudatei.7z' /Pfad/zur/Altdatei.7z *
7z u '-u-!/Pfad/zur/Neudatei.7z' /Pfad/zur/Altdatei.7z *

eine Kopie des alten Bestands in Neudatei.7z zu schreiben und gleichzeitig Altdatei.7z auf den neuesten Stand zu bringen. Außer der Fehlermeldung

Command Line Error:
incorrect update switch command
-!/Pfad/zur/Neudatei.7z

Passiert da nichts. Du könntest mir aber gerne einen Code an die Hand geben, von dem du dir vorstellen kannst, dass er ein sinnvolles Ergebnis erzeugt. Den würde ich dann auch noch ausprobieren.

kB schrieb:

Mein Satz ist eine kompakte Formulierung meines hier vorstehend beschriebenen Verständnisses der Programmfunktion. Vielleicht zu knapp.

Nicht nur das. In den Tabellen wird schon recht anschaulich vermittelt, was beim Setzen des Schalters passiert, da bedarf es dieser sehr komprimierten Zusammenfassung eigentlich nicht.

Meine Befürchtung ist einfach, dass der interessierte Leser nach diesem Satz mit dem Gedanken »Das wird mir jetzt doch zu kompliziert« abwinkt, während er beim direkten Blick auf die Tabellen die Zusammenhänge eher versteht.

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9564

Wohnort: Münster

wxpte schrieb:

[…] kB schrieb:

  • Der Code Bindestrich - in ARBEITSWEISEN löscht die für das Kommando spezifische Vorgabe für ARBEITSWEISEN, d.h. er ist eine Abkürzung für p0q0r0x0y0z0w0. Er kann natürlich auch allein stehend verwendet werden und das ist auch sinnvoll um indirekt eine Arbeitsweise für die Eingabe ARCHIVNAME festzulegen:

Und hier liegst du definitiv falsch:

  1. Der Aktionscode 0 bedeutet, dass die Dateien aus der Archivdatei entfernt werden.

Wo steht das denn so in der Dokumentation?

In der von Dir als Lehrmeister benutzen Seite steht zum action code 0:

0 Ignore file (don't create item in new archive for this file)

Der Text in der Baustelle lautet zur Zeit:

0 Datei wird verworfen bzw. nicht in die neue Archivdatei übernommen.

Das erscheint mir durchaus als treffende Übersetzung, wenn ich auch „ignoriert“ statt „verworfen“ bevorzugen würde.

Jedenfalls liegst Du mit „entfernt“ völlig falsch.

Mit dem - soll aber der Inhalt der vorhandenen Archivdatei unverändert bleiben, also müsste der Aktionscode auch durchgängig 1 lauten.

Das ist wohl Deine Interpretation, zu der ich keinen Beleg in der Dokumentation gefunden habe. Zusammen mit Deinem vorstehenden Fehlverständnis vermute ich daher, dass Du hier falsch liegst.

[…] kB schrieb:

[…] Ich sehe aber keinen Grund, warum man den Code - nicht mit weiteren Codes kombinieren können sollte.

Der Grund ist recht banal: es funktioniert nicht. Gerade habe ich versucht, mit dem Aufruf

7z u -u-'!/Pfad/zur/Neudatei.7z' /Pfad/zur/Altdatei.7z *

eine Kopie des alten Bestands in Neudatei.7z zu schreiben und gleichzeitig Altdatei.7z auf den neuesten Stand zu bringen. Außer der Fehlermeldung […] Passiert da nichts.

Deshalb sind Experimente so wichtig. Allerdings ist -u-'!/Pfad/zur/Neudatei.7z' in Kombination mit dem MUSTER * ein Nullbefehl. Nach meiner – durch die Dokumentation gestützten – Interpretation bedeutet er: „Ignoriere alles und schreibe nichts in die Ausgabedatei.“ Das Ergebnis wäre ein völlig leeres Archiv. Ich sehe zwar keinen Grund, warum das technisch unzulässig wäre, aber es wäre natürlich völlig nutzlos und ich kann mir schon vorstellen, dass sich ein Programm weigert, so etwas zu liefern.

Lediglich Dein von mir vermutetes falsches Verständnis veranlasst Dich zu glauben, mit Deinem Befehl würde eine Kopie angefordert.

Du könntest mir aber gerne einen Code an die Hand geben, von dem du dir vorstellen kannst, dass er ein sinnvolles Ergebnis erzeugt. Den würde ich dann auch noch ausprobieren.

Ich vermute, ein Befehl wie

7z d -u'-p1!NEUES-ARCHIV' ALTES-ARCHIV ' ' 

kopiert (nicht: löscht!) ALTES-ARCHIV → NEUES-ARCHIV und ändert ALTES-ARCHIV nicht. Die Kommandos a und u müssten dasselbe Ergebnis liefern.

kB schrieb:

Mein Satz ist eine kompakte Formulierung meines hier vorstehend beschriebenen Verständnisses der Programmfunktion. Vielleicht zu knapp.

Nicht nur das. In den Tabellen wird schon recht anschaulich vermittelt, was beim Setzen des Schalters passiert, da bedarf es dieser sehr komprimierten Zusammenfassung eigentlich nicht.

Ich halte meinen Satz nicht für zu kompliziert. Lediglich Dein fehlerhaftes Vorverständnis behindert Dich.

Ich halte ihn auch für notwendig, denn ohne ihn entsteht offenbar leicht ein fehlerhaftes Verständnis der Programmfunktion.

Meine Befürchtung ist einfach, dass der interessierte Leser nach diesem Satz mit dem Gedanken »Das wird mir jetzt doch zu kompliziert« abwinkt, während er beim direkten Blick auf die Tabellen die Zusammenhänge eher versteht.

Das Programm 7z, insbesondere dessen Schalter -u ist leider kompliziert. Dagegen hilft kein vereinfachende, aber unzutreffende Darstellung.

wxpte

Anmeldungsdatum:
20. Januar 2007

Beiträge: 1388

kB schrieb:

Jedenfalls liegst Du mit „entfernt“ völlig falsch.

Jetzt komm mal wieder runter! Außer beim Situationscode r (Datei ist nicht im Archiv vorhanden), wird sie, sofern keine neue Archivdatei angelegt wird, sehr wohl entfernt. So völlig falsch kann das daher nicht sein.

kB schrieb:

Mit dem - soll aber der Inhalt der vorhandenen Archivdatei unverändert bleiben, also müsste der Aktionscode auch durchgängig 1 lauten.

Das ist wohl Deine Interpretation, zu der ich keinen Beleg in der Dokumentation gefunden habe. Zusammen mit Deinem vorstehenden Fehlverständnis vermute ich daher, dass Du hier falsch liegst.

Das ist keine Interpretation, so verhält sich das Programm, wenn man es so anwendet. Die Dokumentation ist doch keine Bibel, an die man glauben muss!

kB schrieb:

[…] kB schrieb:

[…] Ich sehe aber keinen Grund, warum man den Code - nicht mit weiteren Codes kombinieren können sollte.

Der Grund ist recht banal: es funktioniert nicht. Gerade habe ich versucht, mit dem Aufruf

7z u -u-'!/Pfad/zur/Neudatei.7z' /Pfad/zur/Altdatei.7z *

eine Kopie des alten Bestands in Neudatei.7z zu schreiben und gleichzeitig Altdatei.7z auf den neuesten Stand zu bringen. Außer der Fehlermeldung […] Passiert da nichts.

Deshalb sind Experimente so wichtig. Allerdings ist -u-'!/Pfad/zur/Neudatei.7z' in Kombination mit dem MUSTER * ein Nullbefehl. Nach meiner – durch die Dokumentation gestützten – Interpretation bedeutet er: „Ignoriere alles und schreibe nichts in die Ausgabedatei.“ Das Ergebnis wäre ein völlig leeres Archiv. Ich sehe zwar keinen Grund, warum das technisch unzulässig wäre, aber es wäre natürlich völlig nutzlos und ich kann mir schon vorstellen, dass sich ein Programm weigert, so etwas zu liefern.

Dann werde ich dir gleich einmal ein Beispiel liefern, wo es funktioniert. Auf deine Interpretation bin ich schon gespannt.

kB schrieb:

wxpte schrieb:

Du könntest mir aber gerne einen Code an die Hand geben, von dem du dir vorstellen kannst, dass er ein sinnvolles Ergebnis erzeugt. Den würde ich dann auch noch ausprobieren.

Ich vermute, ein Befehl wie

7z d -u'-p1!NEUES-ARCHIV' ALTES-ARCHIV ' ' 

kopiert (nicht: löscht!) ALTES-ARCHIV → NEUES-ARCHIV und ändert ALTES-ARCHIV nicht. Die Kommandos a und u müssten dasselbe Ergebnis liefern.

Werde ich gleich mal testen.

kB schrieb:

Lediglich Dein fehlerhaftes Vorverständnis behindert Dich.

Irgendwie scheinst du dich gerade in den Gedanken verrannt zu haben, dass ich mit meiner Interpretation komplett daneben liege. Bisher habe ich unsere Zusammenarbeit als recht konstruktiv empfunden. Das ist gerade anscheinend nicht mehr der Fall.

kB schrieb:

wxpte schrieb:

Meine Befürchtung ist einfach, dass der interessierte Leser nach diesem Satz mit dem Gedanken »Das wird mir jetzt doch zu kompliziert« abwinkt, während er beim direkten Blick auf die Tabellen die Zusammenhänge eher versteht.

Das Programm 7z, insbesondere dessen Schalter -u ist leider kompliziert. Dagegen hilft kein vereinfachende, aber unzutreffende Darstellung.

Damit würdest du implizit behaupten, die Tabellen seien unzutreffend. Nein. Sie sind aber eben ausführlicher, und daher leichter zu verstehen.

noisefloor Team-Icon

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29567

Hallo,

Das halte ich ja schon für ein bisschen anmaßend. Gerade weil du nichts selbst ausprobiert hast, solltest du dein eigenes Verständnis vielleicht einmal ein wenig selbstkritisch hinterfragen.

Guter Punkt. Das gleiche Problem hatte ich auch schon - wenn auch schwächer - diverse Mal mit kB und seiner Art, zu kommunizieren.

Egal. Das ganze hier ist doch auch nicht zielführend. Ich habe das früher im so gehandhabt: wenn jemand (in diesem Fall wxpte) was ins Wiki schreibt bin ich erstmal davon ausgegangen, dass das stimmt. Natürlich gab (und gibt) es auch immer Sachen, die sehr offensichtlich falsch sind oder wo man selber sicher weiß, dass die falsch sind. Dann merkt man das an. Wenn man aber nur glaubt, dass etwas falsch ist, oder mit der Grundeinstellung ran geht, erstmal alles hinterfragen zu müssen - dann kann man es auch direkt sein lassen oder das Wiki direkt abschalten. Das Wiki ist und war nie fehlerlos und wird es auch nie sein. Wenn Fehler drin sind werden diese hoffentlich / wahrscheinlich von der Schwarminteligenz der Community irgendwann beseitigt.

In Zeiten von immer noch schwindender Mitarbeit am Wiki und einem wenig präsentem Wikiteam und einem Haufen ausstehender Aufräumarbeiten im Wiki ist es IMHO echt ungeschickt, sehr punktuell bei einzelnen Artikel hyperkritisch zu sein, wenn das Gesamtwerk eher im Status der Palliativpflege ist.

Gruß, noisefloor

wxpte

Anmeldungsdatum:
20. Januar 2007

Beiträge: 1388

wxpte schrieb:

kB schrieb:

Deshalb sind Experimente so wichtig. Allerdings ist -u-'!/Pfad/zur/Neudatei.7z' in Kombination mit dem MUSTER * ein Nullbefehl. Nach meiner – durch die Dokumentation gestützten – Interpretation bedeutet er: „Ignoriere alles und schreibe nichts in die Ausgabedatei.“ Das Ergebnis wäre ein völlig leeres Archiv. Ich sehe zwar keinen Grund, warum das technisch unzulässig wäre, aber es wäre natürlich völlig nutzlos und ich kann mir schon vorstellen, dass sich ein Programm weigert, so etwas zu liefern.

Dann werde ich dir gleich einmal ein Beispiel liefern, wo es funktioniert. Auf deine Interpretation bin ich schon gespannt.

So, hier wäre schon mal das Beispiel:

ls -l
total 20
-rw-rw-r-- 1 wxpte wxpte 19 Jun 30 09:45 Lasagne.abc
-rw-rw-r-- 1 wxpte wxpte 19 Jun 30 09:47 Lasagne.xyz
-rw-rw-r-- 1 wxpte wxpte 19 Jun 30 09:46 Pizza.abc
-rw-rw-r-- 1 wxpte wxpte 19 Jun 30 09:45 Spaghetti.abc
-rw-rw-r-- 1 wxpte wxpte 19 Jun 30 09:46 Tandoori.abc

7z a Erstes_Archiv.7z *.abc
...
7z l Erstes_Archiv.7z | sed -n '19,$p'
   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2024-06-30 09:45:56 ....A           19           35  Lasagne.abc
2024-06-30 09:46:10 ....A           19               Pizza.abc
2024-06-30 09:45:43 ....A           19               Spaghetti.abc
2024-06-30 09:46:33 ....A           19               Tandoori.abc
------------------- ----- ------------ ------------  ------------------------
2024-06-30 09:46:33                 76           35  4 files

echo 'Eine Änderung' >> Pizza.abc

7z u -u- -u'!Zweites_Archiv.7z' Erstes_Archiv.7z *

7z l Erstes_Archiv.7z | sed -n '19,$p'
   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2024-06-30 09:45:56 ....A           19           35  Lasagne.abc
2024-06-30 09:46:10 ....A           19               Pizza.abc
2024-06-30 09:45:43 ....A           19               Spaghetti.abc
2024-06-30 09:46:33 ....A           19               Tandoori.abc
------------------- ----- ------------ ------------  ------------------------
2024-06-30 09:46:33                 76           35  4 files

7z l Zweites_Archiv.7z | sed -n '19,$p'
   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2024-06-30 09:45:56 ....A           19           35  Lasagne.abc
2024-06-30 09:45:43 ....A           19               Spaghetti.abc
2024-06-30 09:46:33 ....A           19               Tandoori.abc
2024-06-30 09:50:17 ....A          244          287  Erstes_Archiv.7z
2024-06-30 09:47:26 ....A           19               Lasagne.xyz
2024-06-30 09:54:40 ....A           34               Pizza.abc
------------------- ----- ------------ ------------  ------------------------
2024-06-30 09:54:40                354          322  6 files

Der Vollständigkeit halber hier einmal das vollständige Listing von Erstes_Archiv.7z:

7z l Erstes_Archiv.7z | nl -ba
     1	
     2	7-Zip 23.01 (x64) : Copyright (c) 1999-2023 Igor Pavlov : 2023-06-20
     3	 64-bit locale=de_DE.UTF-8 Threads:2 OPEN_MAX:1024
     4	
     5	Scanning the drive for archives:
     6	1 file, 244 bytes (1 KiB)
     7	
     8	Listing archive: Erstes_Archiv.7z
     9	
    10	--
    11	Path = Erstes_Archiv.7z
    12	Type = 7z
    13	Physical Size = 244
    14	Headers Size = 209
    15	Method = LZMA2:12
    16	Solid = +
    17	Blocks = 1
    18	
    19	   Date      Time    Attr         Size   Compressed  Name
    20	------------------- ----- ------------ ------------  ------------------------
    21	2024-06-30 09:45:56 ....A           19           35  Lasagne.abc
    22	2024-06-30 09:46:10 ....A           19               Pizza.abc
    23	2024-06-30 09:45:43 ....A           19               Spaghetti.abc
    24	2024-06-30 09:46:33 ....A           19               Tandoori.abc
    25	------------------- ----- ------------ ------------  ------------------------
    26	2024-06-30 09:46:33                 76           35  4 files

Falls du auch für das Archiv Zweites_Archiv.7z irgendwelche Informationen oberhalb der Zeile 19 benötigst, sag' Bescheid.

wxpte

Anmeldungsdatum:
20. Januar 2007

Beiträge: 1388

wxpte schrieb:

kB schrieb:

wxpte schrieb:

Du könntest mir aber gerne einen Code an die Hand geben, von dem du dir vorstellen kannst, dass er ein sinnvolles Ergebnis erzeugt. Den würde ich dann auch noch ausprobieren.

Ich vermute, ein Befehl wie

7z d -u'-p1!NEUES-ARCHIV' ALTES-ARCHIV ' ' 

kopiert (nicht: löscht!) ALTES-ARCHIV → NEUES-ARCHIV und ändert ALTES-ARCHIV nicht. Die Kommandos a und u müssten dasselbe Ergebnis liefern.

Werde ich gleich mal testen.

Wie ich es schon erwartet habe:

7z d -u'-p1!Drittes_Archiv.7z' Erstes_Archiv.7z ' '

7-Zip 23.01 (x64) : Copyright (c) 1999-2023 Igor Pavlov : 2023-06-20
 64-bit locale=de_DE.UTF-8 Threads:2 OPEN_MAX:1024



Command Line Error:
incorrect update switch command
-p1!Drittes_Archiv.7z

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9564

Wohnort: Münster

wxpte schrieb:

wxpte schrieb:

kB schrieb:

Deshalb sind Experimente so wichtig. Allerdings ist -u-'!/Pfad/zur/Neudatei.7z' in Kombination mit dem MUSTER * ein Nullbefehl. Nach meiner – durch die Dokumentation gestützten – Interpretation bedeutet er: „Ignoriere alles und schreibe nichts in die Ausgabedatei.“ Das Ergebnis wäre ein völlig leeres Archiv. Ich sehe zwar keinen Grund, warum das technisch unzulässig wäre, aber es wäre natürlich völlig nutzlos und ich kann mir schon vorstellen, dass sich ein Programm weigert, so etwas zu liefern.

Dann werde ich dir gleich einmal ein Beispiel liefern, wo es funktioniert. Auf deine Interpretation bin ich schon gespannt.

So, hier wäre schon mal das Beispiel: […]

Danke für den Test. Allerdings entspricht Dein Beispiel ja nicht der zitierten Situation und ist daher kein Gegenbeispiel zu meiner Interpretation. Bezüglich des Verhaltens des Programms in diesem Deinen Beispiel gibt es keine Diskrepanz zwischen uns.

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9564

Wohnort: Münster

wxpte schrieb:

wxpte schrieb:

kB schrieb:

wxpte schrieb:

Du könntest mir aber gerne einen Code an die Hand geben, von dem du dir vorstellen kannst, dass er ein sinnvolles Ergebnis erzeugt. Den würde ich dann auch noch ausprobieren.

Ich vermute, ein Befehl wie

7z d -u'-p1!NEUES-ARCHIV' ALTES-ARCHIV ' ' 

kopiert (nicht: löscht!) ALTES-ARCHIV → NEUES-ARCHIV und ändert ALTES-ARCHIV nicht. Die Kommandos a und u müssten dasselbe Ergebnis liefern.

Werde ich gleich mal testen.

Wie ich es schon erwartet habe:

7z d -u'-p1!Drittes_Archiv.7z' Erstes_Archiv.7z ' '

7-Zip 23.01 (x64) : Copyright (c) 1999-2023 Igor Pavlov : 2023-06-20
 64-bit locale=de_DE.UTF-8 Threads:2 OPEN_MAX:1024



Command Line Error:
incorrect update switch command
-p1!Drittes_Archiv.7z

Danke für den Test. Damit hast Du bewiesen, dass sich das Programm nicht so wie beschrieben verhält. Insbesondere ist die aus der Manpage des Programms stammende Syntax für den Schalter -u im real existierenden Programm nicht realisiert. Damit sind logischerweise auch meine nur auf die Dokumentation gestützten Vorstellungen fehlerhaft.

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9564

Wohnort: Münster

Korrekturen eingearbeitet.

wxpte

Anmeldungsdatum:
20. Januar 2007

Beiträge: 1388

kB schrieb:

wxpte schrieb:

wxpte schrieb:

kB schrieb:

Deshalb sind Experimente so wichtig. Allerdings ist -u-'!/Pfad/zur/Neudatei.7z' in Kombination mit dem MUSTER * ein Nullbefehl. Nach meiner – durch die Dokumentation gestützten – Interpretation bedeutet er: „Ignoriere alles und schreibe nichts in die Ausgabedatei.“ Das Ergebnis wäre ein völlig leeres Archiv. Ich sehe zwar keinen Grund, warum das technisch unzulässig wäre, aber es wäre natürlich völlig nutzlos und ich kann mir schon vorstellen, dass sich ein Programm weigert, so etwas zu liefern.

Dann werde ich dir gleich einmal ein Beispiel liefern, wo es funktioniert. Auf deine Interpretation bin ich schon gespannt.

So, hier wäre schon mal das Beispiel: […]

Allerdings entspricht Dein Beispiel ja nicht der zitierten Situation und ist daher kein Gegenbeispiel zu meiner Interpretation.

Okay, dann weiter:

rm Zweites_Archiv.7z

echo 'Eine Änderung' >> Pizza.abc

7z u -up0q0r0x0y0z0w0 -u'!Zweites_Archiv.7z' Erstes_Archiv.7z *

7z l Erstes_Archiv.7z | sed -n '19,$p'
------------------- ----- ------------ ------------  ------------------------
------------------- ----- ------------ ------------  ------------------------
                                     0            0  0 files

7z l Zweites_Archiv.7z | sed -n '19,$p'
   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2024-06-30 09:45:56 ....A           19           35  Lasagne.abc
2024-06-30 09:45:43 ....A           19               Spaghetti.abc
2024-06-30 09:46:33 ....A           19               Tandoori.abc
2024-06-30 13:17:40 ....A          269          317  Erstes_Archiv.7z
2024-06-30 09:47:26 ....A           19               Lasagne.xyz
2024-06-30 13:18:04 ....A           49               Pizza.abc
------------------- ----- ------------ ------------  ------------------------
2024-06-30 13:18:04                394          352  6 files

zeigt schon einmal, dass

kB schrieb:

  • Der Code Bindestrich - in ARBEITSWEISEN löscht die für das Kommando spezifische Vorgabe für ARBEITSWEISEN, d.h. er ist eine Abkürzung für p0q0r0x0y0z0w0.

keineswegs zutrifft. Die durchgängige Besetzung der Situationscodes mit dem Aktionscode 1 (wie ich zunächst vermutete) allerdings auch nicht.

Indessen ist das folgende Ergebnis identisch mit meinem obigen Beispiel:

rm *.7z

7z a Erstes_Archiv.7z *.abc

echo 'Eine Änderung' >> Pizza.abc

7z u -up1q1r0x1y1z1w1 -u'!Zweites_Archiv.7z' Erstes_Archiv.7z *

7z l Erstes_Archiv.7z | sed -n '19,$p'
   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2024-06-30 09:45:56 ....A           19           35  Lasagne.abc
2024-06-30 13:30:52 ....A           19               Pizza.abc
2024-06-30 09:45:43 ....A           19               Spaghetti.abc
2024-06-30 09:46:33 ....A           19               Tandoori.abc
------------------- ----- ------------ ------------  ------------------------
2024-06-30 13:30:52                 76           35  4 files

7z l Zweites_Archiv.7z | sed -n '19,$p'
   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2024-06-30 09:45:56 ....A           19           35  Lasagne.abc
2024-06-30 09:45:43 ....A           19               Spaghetti.abc
2024-06-30 09:46:33 ....A           19               Tandoori.abc
2024-06-30 13:38:46 ....A          245          289  Erstes_Archiv.7z
2024-06-30 09:47:26 ....A           19               Lasagne.xyz
2024-06-30 13:45:21 ....A           34               Pizza.abc
------------------- ----- ------------ ------------  ------------------------
2024-06-30 13:45:21                355          324  6 files

Ich habe mich also nur beim Situationscode r geirrt (der muss auf 0 stehen). Interpretierst du dieses Testergebnis immer noch als »löschen« der Vorgabe?

Aufbauend auf diese Erkenntnis habe ich mein ursprüngliches Beispiel neu gestaltet:

cp -p Spaghetti.abc Pizza.abc
ls -l
total 20
-rw-rw-r-- 1 wxpte wxpte 19 Jun 30 09:45 Lasagne.abc
-rw-rw-r-- 1 wxpte wxpte 19 Jun 30 09:47 Lasagne.xyz
-rw-rw-r-- 1 wxpte wxpte 19 Jun 30 09:45 Pizza.abc
-rw-rw-r-- 1 wxpte wxpte 19 Jun 30 09:45 Spaghetti.abc
-rw-rw-r-- 1 wxpte wxpte 19 Jun 30 09:46 Tandoori.abc

7z a Erstes_Archiv.7z *.abc

echo 'Eine Änderung' >> Pizza.abc

7z u -u'p1q1r0x1y1z1w1!Zweites_Archiv.7z' Erstes_Archiv.7z *

7z l Erstes_Archiv.7z | sed -n '19,$p'
   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2024-06-30 09:45:56 ....A           19           35  Lasagne.abc
2024-06-30 09:45:43 ....A           19               Spaghetti.abc
2024-06-30 09:46:33 ....A           19               Tandoori.abc
2024-06-30 14:19:15 ....A          238          281  Erstes_Archiv.7z
2024-06-30 09:47:26 ....A           19               Lasagne.xyz
2024-06-30 14:19:22 ....A           34               Pizza.abc
------------------- ----- ------------ ------------  ------------------------
2024-06-30 14:19:22                348          316  6 files

7z l Zweites_Archiv.7z | sed -n '19,$p'
   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2024-06-30 09:45:56 ....A           19           35  Lasagne.abc
2024-06-30 09:45:43 ....A           19               Pizza.abc
2024-06-30 09:45:43 ....A           19               Spaghetti.abc
2024-06-30 09:46:33 ....A           19               Tandoori.abc
------------------- ----- ------------ ------------  ------------------------
2024-06-30 09:46:33                 76           35  4 files

Es funktioniert also genau so, wie ich es mir ursprünglich vorgestellt hatte. Vor diesem Hintergrund müsstest du deine Aussage

kB schrieb:

Allerdings ist -u-'!/Pfad/zur/Neudatei.7z' in Kombination mit dem MUSTER * ein Nullbefehl. Nach meiner – durch die Dokumentation gestützten – Interpretation bedeutet er: „Ignoriere alles und schreibe nichts in die Ausgabedatei.“ Das Ergebnis wäre ein völlig leeres Archiv.

auch noch einmal überdenken.

wxpte

Anmeldungsdatum:
20. Januar 2007

Beiträge: 1388

Kommen wir noch zu dem Punkt, auf den du bisher nicht eingegangen bist:

wxpte schrieb:

Außerdem noch: Situationscode p im Dateisystem nicht relevant? Meines Erachtens ist das sogar sehr relevant, da die Shell die Wildcards im Dateisystem erst auflöst und daraus ein Muster zur Prüfung der im Archiv befindlichen Dateien erzeugt.

Mit dem nachfolgenden Beispiel will ich illustrieren, was ich damit meine (die Dateien aus den vorherigen Beispielen habe ich nicht ohne Grund so gewählt 😉):

ls -l
total 20
-rw-rw-r-- 1 wxpte wxpte 19 Jun 30 09:45 Lasagne.abc
-rw-rw-r-- 1 wxpte wxpte 19 Jun 30 09:47 Lasagne.xyz
-rw-rw-r-- 1 wxpte wxpte 19 Jun 30 09:45 Pizza.abc
-rw-rw-r-- 1 wxpte wxpte 19 Jun 30 09:45 Spaghetti.abc
-rw-rw-r-- 1 wxpte wxpte 19 Jun 30 09:46 Tandoori.abc

7z a Archiv_fuer_Abgleich *

7z l Archiv_fuer_Abgleich.7z | sed -n '19,$p'
   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2024-06-30 09:45:56 ....A           19           35  Lasagne.abc
2024-06-30 09:47:26 ....A           19               Lasagne.xyz
2024-06-30 09:45:43 ....A           19               Pizza.abc
2024-06-30 09:45:43 ....A           19               Spaghetti.abc
2024-06-30 09:46:33 ....A           19               Tandoori.abc
------------------- ----- ------------ ------------  ------------------------
2024-06-30 09:47:26                 95           35  5 files

rm Tandoori.abc

7z u -up0 Archiv_fuer_Abgleich.7z *.abc

7z l Archiv_fuer_Abgleich.7z | sed -n '19,$p'
   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2024-06-30 09:45:56 ....A           19           35  Lasagne.abc
2024-06-30 09:45:43 ....A           19               Pizza.abc
2024-06-30 09:45:43 ....A           19               Spaghetti.abc
------------------- ----- ------------ ------------  ------------------------
2024-06-30 09:45:56                 57           35  3 files

Dass die Datei Lasagne.xyz aus dem Archiv verschwindet, ist offensichtlich: weder im Dateisystem noch im Archivinhalt passt das Muster *.abc auf diese Datei.

Interessant ist jedoch, dass auch die Datei Tandoori.abc verschwindet. Denn würde das Muster *.abc direkt auf den Archivinhalt angewendet, dann würde es passen, und die Aktion 0 würde nicht ausgelöst. Indessen wird *.abc aber zunächst von der Shell ausgewertet, und da die Datei Tandoori.abc im Dateisystem nicht mehr existiert, ergibt sich hierfür kein Treffer. Demzufolge wird die Aktion 0 ausgelöst.

In Bezug auf den Situationscode p ist das Dateisystem daher relevant und die gegenteilige Aussage in der Tabelle unzutreffend.

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9564

Wohnort: Münster

wxpte schrieb:

[…] zeigt schon einmal, dass

kB schrieb:

  • Der Code Bindestrich - in ARBEITSWEISEN löscht die für das Kommando spezifische Vorgabe für ARBEITSWEISEN, d.h. er ist eine Abkürzung für p0q0r0x0y0z0w0.

keineswegs zutrifft. Die durchgängige Besetzung der Situationscodes mit dem Aktionscode 1 (wie ich zunächst vermutete) allerdings auch nicht. […] Ich habe mich also nur beim Situationscode r geirrt (der muss auf 0 stehen). Interpretierst du dieses Testergebnis immer noch als »löschen« der Vorgabe?

Grundsätzlich akzeptiere ich experimentelle Ergebnisse, wenn sie (wie in diesem Fall) unter für die Fragestellung zutreffenden Randbedingungen gewonnen wurden.

[…] Vor diesem Hintergrund müsstest du deine Aussage

kB schrieb:

Allerdings ist -u-'!/Pfad/zur/Neudatei.7z' in Kombination mit dem MUSTER * ein Nullbefehl. Nach meiner – durch die Dokumentation gestützten – Interpretation bedeutet er: „Ignoriere alles und schreibe nichts in die Ausgabedatei.“ Das Ergebnis wäre ein völlig leeres Archiv.

auch noch einmal überdenken.

Alle meine bisherigen Ausführungen zur Wirkungsweise des Codes - für den Schalter -u beruhen auf der Dokumentation. Da diese, wie wir durch Deinen Test wissen, jedenfalls in Bezug auf diesen Punkt falsch ist, sind natürlich alle meine diesen Punkt betreffenden Aussagen selbstverständlich Makulatur.