2012-05-18, 14:04
  #1
Medlem
herrpages avatar
Jag har cirka 15000 zip-filer som ligger i cirka 500 undermappar, någon som har ett fint script som kan zippa upp allihop och lägga dem i En specifik mapp? I linux då självklart.
Citera
2012-05-18, 14:12
  #2
Medlem
Nostradumbasss avatar
for i in `ls -R *.zip`; do unzip $i ; done;

Ungefär så. Du får kolla parametrarna för unzip om du vill ha det uppackat till speciella kataloger.
Citera
2012-05-18, 15:48
  #3
Moderator
vhes avatar
ls -R med skalexpanderade wildcards funkar väl inte så bra?

Skall allt ligga i samma mapp, eller vill du ha en särskild mapp för varje fil? Om allt skall packas upp i samma mapp, så gå till mappen du vill ha sakerna, och skriv:

Kod:
find /path/to/zipfiles -name \*.zip | xargs -n 1 unzip

xargs är världens bästa kommando. Möjligen efter xkill =)
Citera
2012-05-20, 07:46
  #4
Medlem
blueCommands avatar
Citat:
Ursprungligen postat av vhe
ls -R med skalexpanderade wildcards funkar väl inte så bra?

Skall allt ligga i samma mapp, eller vill du ha en särskild mapp för varje fil? Om allt skall packas upp i samma mapp, så gå till mappen du vill ha sakerna, och skriv:

Kod:
find /path/to/zipfiles -name \*.zip | xargs -n 1 unzip

xargs är världens bästa kommando. Möjligen efter xkill =)

Dessutom så kan du med fördel slänga på -P 8 om du har lite kräm i burken för att unzip:a 8 filer samtidigt. xargs är kärlek.
Citera
2012-05-20, 08:44
  #5
Medlem
EDIT.

Ouups. Läste för snabbt. Fel OS såg jag nu.

För windows finns detta eminenta program:

http://www.extractnow.com/
__________________
Senast redigerad av OdinWanderer 2012-05-20 kl. 08:49.
Citera
2012-05-20, 08:58
  #6
Medlem
zeligs avatar
Vidareutveckling på tidigare inlägg:

Kod:
find /path/to/zipfiles -type f -name "*.zip" -exec unzip {} \;

eller

cd /path/to/zipfiles
for f in *.zip; do unzip $f; done
Citera
2012-05-20, 09:23
  #7
Moderator
vhes avatar
Citat:
Ursprungligen postat av blueCommand
Dessutom så kan du med fördel slänga på -P 8 om du har lite kräm i burken för att unzip:a 8 filer samtidigt. xargs är kärlek.

Fan, -P-flaggan hade jag missat helt. Är den "ny"? *letar och noterar att den verkar finnas i bsd:erna, men inte i Open Group-specen*

Hur hanterar den data till stdout/stderr? Hamnar allt huller om buller?

Tackar för kompletteringen iaf, mycket bra flagga att känna till.
Citera
2012-05-20, 10:10
  #8
Medlem
hashs avatar
Citat:
Ursprungligen postat av blueCommand
Dessutom så kan du med fördel slänga på -P 8 om du har lite kräm i burken för att unzip:a 8 filer samtidigt. xargs är kärlek.
Rätta mig om jag har fel, find skickar väl bara data i sekvens?


Citat:
Ursprungligen postat av zelig
Vidareutveckling på tidigare inlägg:

Kod:
find /path/to/zipfiles -type f -name "*.zip" -exec unzip {} \;

eller

cd /path/to/zipfiles
for f in *.zip; do unzip $f; done
Ditt första alternativ är att föredra, då loopa bara känns onödigt och långsammare.
Dessutom tar inte din for-loop underkataloger.

Kod:
find /path -iname '*.zip' -exec unzip -o {} -d /destination \;
Citera
2012-05-20, 11:10
  #9
Moderator
vhes avatar
Citat:
Ursprungligen postat av hash
Rätta mig om jag har fel, find skickar väl bara data i sekvens?
Hur så? Ett rimligt antagande är väl att find kommer hinna spotta ur sig filnamn snabbare än zip hinner packa upp filerna, så att parallellisera zip-processer lär knappast vara ett problem?

[edit]: Förbryllad över ditt påstående om att den föreslagna loopen skulle vara slö var jag på väg att skriva nått om att en loop i skalet ändå måste vara snabbare än find, men tji fick jag när jag började göra tester för att bevisa min tes. Den här tråden blev mer lärorik än jag någonsin hade kunnat tro!
__________________
Senast redigerad av vhe 2012-05-20 kl. 11:13.
Citera
2012-05-20, 12:39
  #10
Medlem
Om find och xargs kombinerats är det bra att använda null terminator som delimiter. Då kan filnamnen innehålla vilka tecken som helst utan problem.

find -print0 | xargs -0 prog
Citera
2012-05-20, 16:14
  #11
Medlem
hashs avatar
Citat:
Ursprungligen postat av vhe
Hur så? Ett rimligt antagande är väl att find kommer hinna spotta ur sig filnamn snabbare än zip hinner packa upp filerna, så att parallellisera zip-processer lär knappast vara ett problem?

Glöm detta, jag gjorde en tankevurpa
Har läst på lite mer om hur det fungerar med xargs och parallisering.
blueCommand har naturligtvis rätt i att man kan snabba ännu mera med -P 8.
Vilket är då bättre än att använda sig av -exec i find-kommadot.
Citera
2012-05-21, 12:54
  #12
Medlem
blueCommands avatar
Citat:
Ursprungligen postat av vhe
Fan, -P-flaggan hade jag missat helt. Är den "ny"? *letar och noterar att den verkar finnas i bsd:erna, men inte i Open Group-specen*

Hur hanterar den data till stdout/stderr? Hamnar allt huller om buller?

Tackar för kompletteringen iaf, mycket bra flagga att känna till.

Nja, ny vet jag inte om den är. Jag hittade den själv för inte allt för länge sedan.
Ang. utmatning så jo - det hamnar huller om buller.

Citat:
Ursprungligen postat av Akina
Om find och xargs kombinerats är det bra att använda null terminator som delimiter. Då kan filnamnen innehålla vilka tecken som helst utan problem.

find -print0 | xargs -0 prog

Det där har jag sett några gånger men inte tagit mig tid att kolla upp vad det är. Grymt smidigt, skall jag lägga på minnet.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in