Hallo, Am Mit, 06 Sep 2006, Al Bogner schrieb:
Am Dienstag, 5. September 2006 22:28 schrieb David Haller:
find "$DIR" -type f -regex ".*75_.*\.zip" -print0 | xargs -r -0 -n1 unzip
Aber -regex brauchst du in dem Fall gar nicht:
find "$DIR" -type f -name "*75_*.zip" -print0 | xargs -r -0 -n1 unzip ... $ unzip -h [..] -j junk paths (do not make directories)
Ansonsten: suchst du evtl. auch die Option '-d exdir' von unzip?
Wäre eine Alternative, ich denke aber da ist kein großer Unterschied.
Ja. Aber das '-j' sollte doch sein, was du gesucht hast, oder?
Versuche ich ähnlich wie bei o.a. "find | xargs" nur die gefundenen Dateien nach $ENTPACKDIR zu kopieren, dann wird das Verzeichnis nicht gefunden, ich habe da also irgendein Syntaxproblem. Statt unzip gebe ich einfach cp -v $ENTPACKDIR an.
Ueberlege dir, was 'cp' zu sehen bekommt:
cp -v $ENTPACKDIR dateiname dateiname ... dateiname
Ist das korrekt?
Ja
Ja, das bekommt cp von dir, aber es ist eben flasch! s.u.
$ cp --help ... or: cp [OPTION]... SOURCE... DIRECTORY
Ich hatte das so interpretiert, dass das letzte Argument das Ziel ist.
Eben. Und somit ist die Zeile oben, die dein " | xargs cp" erzeugt flasch.
Es geht um das Kopieren von Dateien auf eine SD-Karte. Nehmen wir an, dass ich max. 100MB der vorher extrahierten Dateien auf die Karte kopieren möchte um sie bei Bedarf unterwegs am Handy auf Karte zur Verfügung zu haben. Die extrahierten Dateien sind 9-stellig durchnummeriert, höhere Nummern haben Vorrang, d.h. es soll auf jeden Fall die höchste Nummer kopiert werden, dann die 2. höchste, etc., jedoch wieder mit der Einschränkung, dass die ersten beiden Stellen höchstens mit "06" (aktuelles Jahr) beginnen. Es ist auszuschließen, dass 1 Datei über 100MB hat, die Dateien liegen eher im kB-Bereich als im MB-Bereich. Es gibt auch Dateien die zwischen 50-99 beginnen und die will ich nicht haben.
Beispiel
001234501_irgendwas.ext ... 061234568_wasanderes.ext 061234569_nochwasanderes.ext
Muss ich das Datei für Datei in einer Schleife analysieren? WIe macht man so was möglichst effizient?
Ich wuerde (natuerlich) zu perl greifen, damit kann man sogar noch die Zip-Dateien auspacken und hat u.a. ein 'stat' usw. um beliebig zu filtern / sortieren, was man will ;) Ansonsten (alles komplett UNGETESTET): sumsize=0 ls 06* | sort -n | while read f; do let sumsize += `stat -c '+%s' "$f"`; cp "$f" /ZIEL test $sumsize -gt 100000000 && break done Wobei, statt $sumsize sollte man vielleicht besser schauen, wieviel Platz noch auf /ZIEL ist. (df /ZIEL)... Also: do s=`du -k "$f" | cut -f 1` test $s -lt `df -k /ZIEL/ | awk '/dev/{print $4;}'` && break cp "$f" /ZIEL/ sync done oder sowas...
Kann ich da bereits beim Extrahieren der zip-Datei etwas mit xargs machen?
Sind mehrere Dateien in den einzelnen .zip-Dateien? Ausserdem habe ich das was du wie/wann kopieren und auspacken willst noch nicht kapiert. -dnh -- BE MAD! IT HELPS!