zip Archiv entpacken...

Michi0209

Michi0209

Mitglied
Hallo zusammen,

ich soll eine Verzeichnisstruktur durchlaufen und die zip-Archive entpacken...
Das wäre ja alles nicht so wild, jedoch wurden diese mittels ditto gezipt.. (Brauche ich für resource dateien)

naja, auf jeden Fall schaffe ich es einfach nicht das zip archive an die gleiche stelle zu entpacken!

ich rufe folgendes auf:

find ${FILE} -name "*.zip" -exec ditto -c --rsrc {} "$(dirname {} )/$(basename {})" \;

Es wäre echt nett wenn mir jemand weiterhelfen könnte!

Danke
 
Hallo

Mach das mal besser in einer Schleife.
Code:
for i in $(find /home/wolle -iname "*zip"); do cd $(dirname $i)&& ls -l $(basename $i); done

Statt ls -l $(basename $i) schreib halt dein gewünschten Befehl hin.
Allerdings solltest du vorher noch testen, ob es wirklich ein Verzeichnis ist und ob es lesbar ist usw.
Wichtig ist, dass bei Verwendung von dirname und basaname in deinem $FILE der absolute Pfad steht!

Gruß Wolfgang
 
Vielen Dank für Deine Antwort, allerdings habe ich noch immer das Problem das wenn ich ein Zip.-Archiv habe, das sich aus mehreren Wörtern zusammensetzt, diese einzeln "gefunden" werden.
Beispiel:

Das ist mein.zip

dann bekomme ich folgendes Resultat:

ls: Das: No such file or directory
ls: ist: No such file or directory
ls: mein.rsrc.zip: No such file or directory


und so habe ich das geändert:
Code:
for i in $(find ${FILE} -iname "*.zip")
do
	#if [ -d $i ]; then  
		cd $(dirname ${i})&& ls -l $(basename ${i})
	#fi
done
 
das ist schon möglich, aber mit einer antwort wie:
"Das hatten wir doch schonmal. Guck mal in (Deinen) Thread http://www.unixboard.de/vb3/showthread.php?t=20844, da steht die Lösung drin." ist mir leider nicht geholfen....

ich versuche es ja zu verstehen, aber wenn ich einfach nicht den ansatz sehe...??
 
Schau Dir mal im obengenannten Thread den Kommentar #29 und den Text von #28 an. Da steht genau die Lösung drin, die Du suchst. Bei Nichtverstehen einfach nochmal nachfragen...
 
Hallo,
danke habe jetzt wirklich das gemacht, was ihr mir als Lösungsvorschlag empfohlen habt!
Ich bin am verzweifeln...X(




Code:
FILE="$HOME/Development/cw_source"
find ${FILE} -iname "*zip" -print0|xargs -0 -n1|while read VERZ; do 
	echo "Verzeichnis: $VERZ"; 
	echo "Basename: $(basename $VERZ)"
	echo "Dirname: $(dirname $VERZ)"

	ditto -c --rsrc -x $VERZ ${FILE}
done

Das bekomme ich als Resultat:

Code:
Verzeichnis: /Users/Michael/Development/cw_source/EinzelnstempelRegen/Einzelstempel Regen CW.rsrc.zip
Basename: Einzelstempel
Regen
CW.rsrc.zip
usage: dirname path
Dirname: 
ditto: Can't archive multiple sources
Usage: ditto [ <options> ] src [ ... src ] dst
 
Versuchs doch mal mit doppelten Anfuehrungszeichen um die Dateivariable. Bei mir funktioniert das:
Code:
 for i in leer\ stellen.zip ; do unzip "$i" ; done
habe kein ditto, aber die Interpretation wird ja von der Shell uebernommen, soltle also auch fuer ditto funktionieren.
 
Code:
FILE="$HOME/Development/cw_source"
find ${FILE} -iname "*zip" -print0|xargs -0 -n1|while read VERZ; do 
	echo "Verzeichnis: $VERZ"; 
	echo Basename: $(basename "$VERZ")
	echo Dirname: $(dirname "$VERZ")

	ditto -c --rsrc -x "$VERZ" ${FILE}
done
 
Hallo,

deine für deine Hilfe Xanti...


Eine kleine frage noch...


gibt es unter umständen eine möglichkeit die -iname "*zip" Abfrage auszuweiten?? Um was es mir geht, ist folgendes! Ich muß mein im moment mein verzeichnis drei mal durchlaufen, damit alle drei "zustände" bereinigt werde! was cool wäre ist, wenn ich quasi eine oder bedingung dazwischen schalten könnte!?!?! Sowas wie:

Code:
find ${FILE} -iname "*zip || *rsrc || *.a" -print0|xargs -0 -n1|while read VERZ; do 
	cd "$(dirname "$VERZ")"&& ditto --rsrc -x "$(basename "${VERZ}")" "$(dirname "$VERZ")"	

done

Leider scheint es auf diese weise nicht zu funktionieren... jemand eine Idee?
 
Code:
find ${FILE} -iname *zip -or -iname *rsrc -or -iname *.a ...

Steht alles in man find.

Gruss, Xanti
 
ups...:think:

vielen dank ;)



shit, habe jetzt mal das komplette Script laufen lassen und leider mit bedauern feststellen müssen, das es nicht funktioniert, mit der oder anweisung! er überspringt einfach diese anweiseung!?
So sieht mein find neu aus:

find "${FILE}" -iname "*.rsrc" -or -iname "*.a" -exec ditto --rsrc -c -X {} {}.zip \;

jemand eine Idee???
 
Zuletzt bearbeitet:
Man muss entsprechend klammern, da es sich bei den Parametern von find um logische "Testbeziehungen" handelt. Normalerweise bedeutet: -iname "*.a" -exec ditto ... nämlich -iname "*.a" -and -exec ditto ... (-and wird aus Bequemlichkeit weggelassen), also alle Files, deren Namen *.a entsprechen (-iname wird true), werden mit -exec ausgewertet, weil es eine und-Beziehung ist. Da -and einen "Vorrang" gegenüber -or hat, muss man klammern, damit die Logik stimmt:

Code:
find "${FILE}" \( -iname "*.rsrc" -or -iname "*.a" \) -exec ditto --rsrc -c -X {} {}.zip \;
 
Zuletzt bearbeitet:

Ähnliche Themen

Überblick: Komprimierung und Dekomprimierung von tar/gz/bz2/zip

Zurück
Oben