Avatar billede eldaria Nybegynder
15. marts 2007 - 01:13 Der er 8 kommentarer og
1 løsning

batch unzip til mappe

Jeg har en bunke .zip filer som jeg gerne vil unzippe til en mappe og derefter gzip hver enkelt fil inde i den mappe.

Jeg er ikke særligt god til bash script, så om nogen kan lave en hurtig eksempel på hvordan jeg kan gøre det.

vad jeg gerne vil kan illustreres sådan her:

Nu ser det sådan ud:
TingABC.zip
TingDEF.zip
TingGHI.zip

Vad jeg vil have:
TingABC/TingA.gz
TingABC/TingB.gz
TingABC/TingC.gz
TingDEF/TingD.gz
TingDEF/TingE.gz
TingDEF/TingF.gz
TingGHI/TingG.gz
TingGHI/TingH.gz
TingGHI/TingI.gz

Det scriptet så skal finde ud af er:
Vad hedder zip filen.
unzip filnavn.zip -d filnavn
for hver enkelt fil inde i filnavn
gzip -9 fil
Gå videre til næste zipfil og repetere.
Avatar billede zypher212 Nybegynder
15. marts 2007 - 16:17 #1
Det er faktisk meget nemt at lave det der (i think).

Noget i stil med dette burde kunne gøre det:

#!/bin/bash
unzip -d `ls |grep .zip` tempdir
gzip -9 tempdir/*

Dette script unzipper alle til samme directory, og pakker dem bagefter enkeltvis ned i filer. De kommer ikke til at ligge i forskellige dir's som du egentligt foreslår, det kan laves, men er det vigtigt?
Avatar billede eldaria Nybegynder
15. marts 2007 - 17:42 #2
Ja det er enlig viktigt da nogle af Zip filerne er navnet på Zip filen anerledes, end en anden.
Men indeholdet kan have samme navn som indeholdet i en anden zip fil.
Avatar billede zypher212 Nybegynder
15. marts 2007 - 17:56 #3
"Ja det er enlig viktigt da nogle af Zip filerne er navnet på Zip filen anerledes, end en anden.
Men indeholdet kan have samme navn som indeholdet i en anden zip fil."

Forstår desværre intet af hvad du skriver.
Avatar billede eldaria Nybegynder
15. marts 2007 - 20:59 #4
Hehe, ok..

Eksempel:
Dokumenter(Eng).zip
  Dokument1.rtf
  Dokument2.rtf
Dokumenter(Dan).zip
  Dokument1.rft
  Dokument2.rtf
Dokumenter(Sve).zip
  Dokument1.rtf
  Dokument2.rtf

Som du kan se i eksemplet, så indholder alle 3 zip filer 2 dokumenter.
Men navnet er det samme som i de andre zip filer.

Jeg har ca 2500 zip filer der er sådan, hvor mange af dem har indehold hvor navnene er det samme som i de andre.
Derfor er jeg nød til at udpakke dem i deres egne mapper.
Avatar billede zypher212 Nybegynder
16. marts 2007 - 17:20 #5
Noget i stil med dette:

#!/bin/bash

EXTENSION="zip"
FILES=`ls ./* -1 |grep .${EXTENSION}$ `
LINES=`echo $FILES | awk '{ for (i=1;i<=NF;i++) print $i }' |wc -l`
TEMP=0
echo "LINES == $LINES"
while [ $TEMP -lt $LINES ];do
    LINENUM=`echo $FILES | awk '{ for (i=1;i<=NF;i++) print $i }' |tail -n $((LINES - TEMP))|head -n 1`
    DIR="dir${LINENUM#./}"
    DIR=${DIR%.zip}
    unzip $LINENUM -d $DIR
    #echo "LINE $TEMP == $LINENUM"
    DIRS="$DIRS $DIR"
    TEMP=$((TEMP + 1))
done

TEMP=0
while [ $TEMP -lt $LINES ];do
LINENUM=`echo $DIRS | awk '{ for (i=1;i<=NF;i++) print $i }' |tail -n $((LINES - TEMP))|head -n 1`
    gzip -9 -r ./${LINENUM}/*
    TEMP=$((TEMP +1))
done
Avatar billede zypher212 Nybegynder
16. marts 2007 - 17:26 #6
Forresten: Copyright @ zypher212 :)

Den ligger alle filerne ind i mapper med navnet dir[filnavn-uden-extension]. Det kan nemt ændres til mappen bare hedder [filnavn-uden-extension].
Avatar billede eldaria Nybegynder
16. marts 2007 - 17:38 #7
Fik lidt hjælp på Linuxquestions.org
og kom op med følgende.

#!/bin/bash

find -type f -iname '*.zip' |
while IFS= read -r file
do
  dir=${file%.zip}
  if mkdir "$dir"
  then
    curdir=`pwd`
    cd "$dir" || { echo "Could not move to $dir"; continue; }
    unzip -q "$curdir/$file"
    gzip -9 *
    cd ..
    rm "$file"
  fi
done
exit 0

Men siden du også kom op med en løsning skal du jo have points. :-)
Så smid et svar.
Avatar billede zypher212 Nybegynder
16. marts 2007 - 17:59 #8
Hvad gør stykket:
"while IFS= read -r file"
helt bestemt?
Avatar billede eldaria Nybegynder
16. marts 2007 - 18:51 #9
Det har jeg selv prøvet at finde ud af. :)
Men så vidt jeg kan se har det med Mellemrum osv i filnavne at gøre.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester