Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Unzip-Problem

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Sonstiges
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
jascha
Gast





BeitragVerfasst am: 07. März 2002 0:46   Titel: Unzip-Problem

Hallo,
ich bin auf der Suche nach einem Befehl, mit dem ich
alle in einem Verzeichnis liegenden Zip-Dateien
automatisch in einen gleichnamigen Ordner entpacken
kann, so dass ich nicht für jede zu entpackende
Datei immer ein Zielverzeichnis angeben muss.
Beispiel:
ich bin im Verzeichnis /home/username, in dem die
Zip-Dateien Linux.zip, Abrechnung.zip und MP3.zip
liegen. Nun sollen diese drei Zip-Files in jeweils in
einen neu zu erzeugenden Ordner mit den Namen
"Linux", "Abrechnung" und "MP3" entpackt werden.
Ja, ich habe die Manpage zu "unzip" gelesen. Dort habe
ich gelesen, dass man mit
unzip -d exdir filename das
Zielverzeichnis angibt. Wenn ich nun aber
unzip -d */ * eingebe, werden alle
Zip-Dateien in das neue Verzeichnis * entpackt. Ist ja
auch logisch, aber wie bringe ich das unzip-Kommando
dazu, das zu machen was ich will ?

greets, jascha
 

Jochen
Gast





BeitragVerfasst am: 07. März 2002 11:36   Titel: Re: Unzip-Problem

Pi * Daumen könnte das so aussehen:
code:

#!/bin/bash

EXITCODE=0

for ARG ; do
NAME=$(basename "$ARG" .zip)
if mkdir "$NAME" ; then
unzip -d "$NAME" "$ARG"
else
echo "$0: Fehler beim Erstellen des Verzeichnisses, überspringe \"$ARG\"." >&2
(( EXITCODE += 1 ))
continue
fi
done

exit $EXITCODE



In der Schleife über alle Argumente wird bei jedem einzelnen Argument der passende Verzeichnisname als Name des Archivs minus ".zip" ermittelt. Dieses wird dann erstellt; geht das schief (weil es schon existiert, Schreibberechtigung fehlt usw.), wird das betroffene Archiv übersprungen. Ansonsten wird das Archiv in das frisch erstellte Verzeichnis ausgepackt. Rückgabewert des Skripts ist die Anzahl der nicht ausgepackten Archive.

Übrigens ist dieses Skript ohne Gewähr, da ich es nur auf die Schnelle hier reingehackt habe. Sollte funzen, melde Dich einfach noch mal, wenn es Fehler gibt.

Jochen
 

vyper



Anmeldungsdatum: 27.02.2002
Beiträge: 19

BeitragVerfasst am: 07. März 2002 14:43   Titel: Re: Unzip-Problem

Das continue ist da aber überflüssig *klugscheiss*

Ansonsten sehr schönes Skript.
 
Benutzer-Profile anzeigen Private Nachricht senden

Jochen
Gast





BeitragVerfasst am: 07. März 2002 14:51   Titel: Re: Unzip-Problem

Oooooooooookkkkkaaaaayyyyyyyy............
code:

#!/bin/bash

EXITCODE=0

for ARG ; do
NAME=$(basename "$ARG" .zip)
if ! mkdir "$NAME" ; then
echo "$0: Fehler beim Erstellen des Verzeichnisses, überspringe \"$ARG\"." >&2
(( EXITCODE += 1 ))
continue
fi
unzip -d "$NAME" "$ARG"
done

exit $EXITCODE



Besser so?

Jochen
 

vyper



Anmeldungsdatum: 27.02.2002
Beiträge: 19

BeitragVerfasst am: 07. März 2002 15:02   Titel: Re: Unzip-Problem

Schon besser *g*

Es geht aber noch wesentlich kürzer

code:
#!/bin/bash

for ARG; do
unzip -d `basename $ARG .zip` $ARG
done



Unzip legt das Verzeichnis nämlich freiwillig an
 
Benutzer-Profile anzeigen Private Nachricht senden

Jochen
Gast





BeitragVerfasst am: 07. März 2002 15:54   Titel: Re: Unzip-Problem

Nur ist Kürze nicht alles: Was, wenn das Verzeichnis schon existiert und einen Inhalt hat, der sich vom Archiv unterscheidet? Das gibt einen wundervollen Mischmasch...

Also lieber "So korrekt wie nötig, so kurz wie möglich". Und im Zweifelsfalle finde ich a) Lesbarkeit und b) einen aussagefähigen Exitcode meiner Skripte doch auch sehr praktisch.

Jochen
 

Jochen
Gast





BeitragVerfasst am: 07. März 2002 15:56   Titel: Re: Unzip-Problem

Ach ja, einen habe ich noch: Ruf Dein Skript mal mit dem Argument "Gemeiner Name.zip" auf (inkl. Anführungszeichen) auf. Die Datei sollte natürlich auch existieren. Siehst Du das Problem?

Jochen
 

LBS
Gast





BeitragVerfasst am: 07. März 2002 21:51   Titel: Re: Unzip-Problem

Tach,

na ich hoffe Ihr habt euch geeinigt welches Skript genommen wird
hätte da mal eine frage zu dem skript von Jochen, für was sind denn die beiden Klammern um den EXITCODE += 1 ???

Danke

cu
 

Jochen
Gast





BeitragVerfasst am: 08. März 2002 8:46   Titel: Re: Unzip-Problem

Och, das mit dem Skript ist harmlos. Sascha und ich haben scheinbar den gleichen Drang zum Klugscheissen.

Die doppelten runden Klammern sind die arithmetische Evaluierung der bash; die Schreibweisen
let "E += 1"
und
(( E += 1 ))
sind äquivalent.
Man spart sich das expr, dass in der alten sh immer nötig war. Und wenn man mal schnell etwas rechnen muss (zumindest im Integerbereich), kann man auch noch ein $ vor die doppelten runden Klammern setzen:

echo $(( 28 * 3 + 6))

ergibt die erwarteten 90 als Ausgabe.

Jochen
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Sonstiges Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy