Ich habe im Forum viel gesucht aber kein Thema finden können das meine Frage beantwortet. Ich brauche ein bash script mit dem ich gleiche Datainamen mit verschiednenen Endungen in ein zip packen z. B. auto.jpg auto.pdf ...zip flugzeug.jpg flugzeug.pdf ...zip usw. Alles muss automatisch gepackt werden.
Gleiche Datainamen mit verschiedenen endungen in ein zip
Anmeldungsdatum: Beiträge: Zähle... |
|
||||
Anmeldungsdatum: Beiträge: 17548 Wohnort: Berlin |
Wenn es einen Dateityp für jeden Vornamen gibt, etwa PDF, dann könntest Du mit
über alle Dateien iterieren. Wenn nicht gesagt ist, dass eine Endung immer vorkommt, wird es aufwendiger. Man könnte die nächstbeste Datei nehmen, solange eine da ist, und alle mit gleichem Vornamen zippen und alle verarzteten Dateien verschieben, bis keine Datei übrig ist. Am Ende schiebt man die Dateien dann wieder zurück. Mit basename ermittelt man den Vornamen der Datei (siehe |
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: Zähle... |
Vielen Dank für deine Antwort. Ich möchte aber nicht nach Endung packen sondern nach Datainamen z. B. auto.jpg auto.pdf in auto.zip und Flugzeug.jpg Flugzeug.pdf in Flugzeug.zip usw. ist das die richtige Methode was du vorschlagst ? Dein Vorschlag habe ich versucht in bash script zu schreiben aber da kommt " n_files_packen: not found" |
||||
Anmeldungsdatum: Beiträge: 17548 Wohnort: Berlin |
Ja, ich wollte das Script nicht für Dich schreiben, sondern nur Hinweise geben.
Mit dieser Kombination aus Schleife und Wildcard (*.pdf) würdest Du alle Namen finden, wenn es für jeden Namen eine PDF-Datei gibt. Erst auto.pdf, dann Flugzeug.pdf. Die Funktion n_files_packen musst Du selbst schreiben, und die würde erst mit auto.pdf aufgerufen und müsste dann "auto." als Vornamen finden und könnte dann auto.* in ein auto.zip zippen. Dann würde sie mit Flugzeug.pdf aufgerufen. Das auto. findest Du mit basename. |
||||
Anmeldungsdatum: Beiträge: 11176 Wohnort: München |
Als natives Bash-Skript:
Mit der Bash 4.4. (erst ab Ubuntu 18.04 dabei) kann man die erste while-Schleife durch einen readarray-Befehl ersetzen (vlg. https://stackoverflow.com/a/34557041) Mit Python 3 (>=3.6) gefällt mir das besser, weil man sich eine zusätzliche Iteration über die Dateien sparen kann und um Besonderheiten wie Newlines in Dateinamen nicht umständlich herumgearbeitet werden muss:
Was die beiden Lösungen nicht ignorieren sind führende Punkte in Dateinamen bei versteckten Dateien (die werden also getrennt verpackt). |
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 13 |
Das war genau das was ich brauchte ich bedanke mich für die Antworten. Nachtrag: Wenn alle Dataienen selbe Namen hätten wäre das die Lösung aber jetzt habe ich ein anderes Problem nämlich ein Datai hat mehrere Buchstaben danach die will ich auch in selben zip. Mein problem ist folgender ich habe drei Dataien auto.jpg auto.pdf auto-test.gif . Ich möchte auch das die auto-test.gif datai in selben zip reinkommen wie die anderen Beiden. Gibt es eine möglichkeit z. B. nach ersten vier buchstaben zu suchen und wenn die gleich sind das sie alle in selben zip reinkommen ? |
||||
Anmeldungsdatum: Beiträge: 11176 Wohnort: München |
Klar, du musst dazu nach (oder in) dem sed-Befehl in Zeile 6 die durch die Pipe kommenden Zeilen auf die gewünschte Anzahl von Zeichen kürzen und in Zeile 11 den Suchausdruck für Schnapp die die Dokumentation und/oder Manpages für die Bash, sed und find und versuche nachzuvollziehen was das Skript macht und wie du es auf deine Bedürfnisse anpassen kannst. |
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 13 |
Ich kenne mich nicht so gut aus kannst du mir netterweise zeigen wie ich dein Script modifiziere. Dann glaube ich werde ich verstehen die Tipps die du gegeben hast aber jetzt habe ich ehrlich gesagt keine Ahnung was ich da machen soll. |
||||
Anmeldungsdatum: Beiträge: 11176 Wohnort: München |
Daher der Hinweis, das du das angehen solltest. Es bringt dir (außer einem kurzfristigen Zeitgewinn durch ein vorgekautes Stückchen Code) nichts, wenn du nicht weißt, was es warum tut und wie du es anpassen kannst.
Bash-Skript:
Mit Python 3 (>=3.6):
|
||||
(Themenstarter)
Anmeldungsdatum: Beiträge: 13 |
Du hast Recht ich muss das selbst lernen. Kannst du mir Hilfreiche Seiten empfehlen wo ich das tue. Deine Modifizierung hat genau das bewirkt was ich wollte deshalb bedanke ich mich herzlichst nochmal seahawk1986 |