ubuntuusers.de

Unzip Script ohne __MACOSX Ordner

Status: Ungelöst | Ubuntu-Version: Ubuntu 16.04 (Xenial Xerus)
Antworten |

chrisgreen

Anmeldungsdatum:
19. November 2016

Beiträge: 37

Guten Abend,

ich benutze das Tool unzip für das entzippen von Zip-Dateien.

Meine Professoren benutzen manchmal das MACOS um Dateien zu zippen. MACOS erstellt ja wohl ein File, dass dann immer noch extra in dem gezippten Ordner liegt.

Also habe ich eine Datei und unzipe die bekomme ich immer 2 Ordner ein für die entzippten Ordner und einer der

__MACOSX

heißt. Lösung des Problems:

1
unzip Aufgabe1.zip -d Aufgabe1 -x __MACOSX/*

Kann mir jemand sagen, wie ich jetzt die Funktion unzip umschreibe, dass ich nicht immer das

1
__MACOSX/*

ans Ende hängen muss? Von mir aus kann die auch ganz neu sein und unzipmac heißen.

Liebe Grüße und ja, ich bin neuer Benutzer 😉

chrisgreen

jb-alvarado

Anmeldungsdatum:
28. November 2012

Beiträge: 345

Hallo,

wie wäre es damit:

1
2
3
4
5
6
7
8
#!/bin/bash

input="$1"

filename=$(basename "$input")
foldername="${filename%.*}"

unzip "$input" -d "$foldername" -x __MACOSX/*

Wenn du das z.B. als unzipmac.sh speicherst, ausführbar machst (chmod +x unzipmac.sh) und so aufrufst:

unzipmac.sh Aufgabe1.zip

Erstellt es dir einen Ordner, mit dem Archivnamen und dem gewünschten Inhalt.

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Mir scheint, Du willst eigentlich eine Shell-Funktion anlegen, in der Du Deinen modifizierten Befehl kapselst. (egal, ob unter dem selben Namen oder anderem Namen)

Und mir scheint, Du willst sie in Deine ~/.bashrc eintragen ... 😉

Eine Anmerkung zum "Quoting" und Filename Expansion:
Du solltest bei dem Ordnernamen __MACOSX/* unbedingt den Stern "quoten" oder \escapen !
- denn sonst passiert es irgenwann einmal, wenn schon lange keiner mehr dran denkt, dass es zufällig eine Datei __MACOSX/Hopfenschnupf gibt, oder dass das Globbing anders eingestellt ist, und dann geht es schief: der Stern kommt niemals mehr beim unzip an, sondern wird vorher von der Shell zum Dateinamen __MACOSX/Hopfenschnupf expandiert. (klar: dann wird nur noch diese Datei ausgeschlossen, und keiner weiß warum !)

LG,

track

chrisgreen

(Themenstarter)

Anmeldungsdatum:
19. November 2016

Beiträge: 37

Beides sehr hilfreiche antworten.

Allerdings habe ich das noch nie gemacht. Kann mir einer von euch auf die Sprünge helfen, wie die function aussehen würde und wie ich sie korrekt in den bashrc eintragen kann?

Liebe Grüße!

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Eeeehm ... hast Du Dir denn wenigstens mal die Links von mir genauer angesehen ? - da steht es doch eigentlich ziemlich ausführlich drin !

Und ansonsten gibt es hier auf dem Forum noch zig Beispiele. - blättere die doch einmal durch, dann siehst Du, wie es andere gemacht haben.

LG,

track

Axel-Erfurt

Anmeldungsdatum:
18. Mai 2016

Beiträge: 1347

das funktioniert bei mir

unzip Datei.zip -x '__MACOSX/*'

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Ja klar. Weil Du den Stern ge'quotet' hast, ist die Filename Expansion da sicher abgeschaltet. - was ich oben schon sagte.

LG,

track

Axel-Erfurt

Anmeldungsdatum:
18. Mai 2016

Beiträge: 1347

script

#!/bin/bash
    unzip $1 -x '__MACOSX/*'

als myunzip in /usr/bin gespeichert

dann

myunzip Datei.zip

chrisgreen

(Themenstarter)

Anmeldungsdatum:
19. November 2016

Beiträge: 37

Danke!

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13216

Axel-Erfurt schrieb:

script

#!/bin/bash
    unzip $1 -x '__MACOSX/*'

Wenn Du schon ein allgemeines Skript daraus machst, dann solltest Du auch passend quoten:

1
2
3
#!/bin/sh

unzip "$1" -x '__MACOSX/*'

Die sh ist außerdem mächtig genug hierfür - da braucht man keine bash.

Man könnte es sogar noch etwas flexibler machen, indem man weitere Kommandozeilenargumente zulässt:

1
2
3
4
5
6
#!/bin/sh

arc="$1"
shift

unzip "$arc" -x '__MACOSX/*' "$@"
Antworten |