Anzeige:
Ergebnis 1 bis 4 von 4

Thema: Bash: Tarball entpacken, mit grep+regex Unterverzeichnis rausbekommen und entfernen

  1. #1
    Registrierter Benutzer
    Registriert seit
    23.08.2002
    Ort
    Haiger am Niel *g*
    Beiträge
    74

    Unhappy Bash: Tarball entpacken, mit grep+regex Unterverzeichnis rausbekommen und entfernen

    Hi all,
    ich brauche ein Shell-script, das tarballs selbständig in ein bestimmtes Verzeichnis entpackt. Und zwar nicht in das meistens entpackte Unterverzeichnis, sondern direkt in das angegebene Verzeichnis.
    Ich habe das script schon soweit, dass es für einige Tarballs geht.
    Ich poste es einfach mal, ist ja nicht viel: (Usage: ' extract <tarball> <direction> ')
    Code:
    #!/bin/bash
    gzip='*.tar.gz'
    bzip2='*.tar.bz2'
    
    if [ ! $2 ]
    then
      mkdir -p $HOME'/sources/'
      extractdir=$HOME'/sources/'
    else
      extractdir=$2
    fi
    
    if [ -e $1 ]
    then
      if [ ! ${1%%$gzip} ]
      then
        tardir=`tar -ztf $1 | grep ^[^/]*\/$`
        tar -xzf $1 --directory=$extractdir
        mv $extractdir/$tardir* $extractdir
        rmdir $extractdir/$tardir
    
      elif [ ! ${1%%$bzip2} ]
      then
        tardir=`tar -jtf $1 | grep ^[^/]*\/$`
        tar -xjf $1 --directory=$extractdir
        mv $extractdir/$tardir* $extractdir
        rmdir $extractdir/$tardir
    
      else echo "Unknown format"
      fi
    else echo $1": File not found"
    fi
    Das script schaut also zunächst ob es sich um einen gzip oder bzip2 tarball handelt und bearbeitet es entsprechend. Eigentlich hatte ich vor es mit Arrays und ner schleife zu machen, ist aber bei demhier geblieben ;-)
    Mein Problem ist die Zeile
    Code:
    tardir=`tar -ztf $1 | grep ^[^/]*\/$`
    Die soll rausbekommen, wie das unterverzeichnis des Tarballs heißt. Sie funktioniert aber nur, wenn die Dateien im Tarball "verzeichnis/dateien" heißen und nicht, wenn sie "./verzeichnis/dateien" heißen. Genausowenig funktioniert das, wenn es im Tarball gar kein Unterverzeichnis gibt.
    Ersteres müsste eigentlich mit ner Änderung der regex von grep zu beheben sein, ungefähr so: " ^[./]\?[^/]*\/$ ". Das geht nur nicht.

    Hat jemand ne idee wie ich das erreiche?
    Thx
    [Workstation]Intel Core2 Duo E8400/4GB, ATI HD4830 @ kUbuntu/Win7pro
    [Server] Via Epia SP13000/512MB @ Ubuntu LTS Server
    [Mobil] Intel Pentium M 1,86Ghz/512MB/ATI X600M (Asus M6974VLP) @ xUbuntu

  2. #2
    Registrierter Benutzer
    Registriert seit
    05.09.2002
    Ort
    Neuhausen
    Beiträge
    320
    tar ab version 1.14 kennt die Option --strip-components N, neuere die Option --strip-path N um N führende Elemente des Pfades zu entfernen. Für Fall 1 "foo/..." hilft N=1 und für Fall 2 "./foo/..." hilft N=2.

    Das ist doch die Funktion welche du suchst, oder habe ich was falsch verstanden?

    Gruss, Andy

  3. #3
    Registrierter Benutzer
    Registriert seit
    23.08.2002
    Ort
    Haiger am Niel *g*
    Beiträge
    74
    hört sich gut an... ich habe tar 1.14, --strip-path geht.
    Jetzt müsste ich nur noch herausbekommen, welcher der Fälle vorliegt. Wie mache ich das?
    [Workstation]Intel Core2 Duo E8400/4GB, ATI HD4830 @ kUbuntu/Win7pro
    [Server] Via Epia SP13000/512MB @ Ubuntu LTS Server
    [Mobil] Intel Pentium M 1,86Ghz/512MB/ATI X600M (Asus M6974VLP) @ xUbuntu

  4. #4
    Registrierter Benutzer
    Registriert seit
    23.08.2002
    Ort
    Haiger am Niel *g*
    Beiträge
    74
    Das muss doch irgendwie gehen...
    Ich kann ja wie oben das tarball auflisten lassen. Dann müssen die verzeichnisse gesucht werden, die am Anfang jeder zeile gleich sind. Die müssen gezäht werden und die nummer dann hinter den --strip-path Parameter.
    Nur wie mache ich die suche nach den gleichen Verzeichnissen am Anfang? Geht sowas auch mit grep? Nimmt man da ne art Callback-funktion?

    Meißtens steht das Unterverzeichnis ja als erstes in der liste. Kann man das nicht als Suchmuster für alle folgenden Zeilen nehmen? Wenn es in jeder zeile am anfang steht, ist es ein unbenötigtes unterverzeichnis. In diesem string muss man dann nur noch die verzeichnisse zählen.

    Jemand ne idee? Bin nicht so der bash-king...
    [Workstation]Intel Core2 Duo E8400/4GB, ATI HD4830 @ kUbuntu/Win7pro
    [Server] Via Epia SP13000/512MB @ Ubuntu LTS Server
    [Mobil] Intel Pentium M 1,86Ghz/512MB/ATI X600M (Asus M6974VLP) @ xUbuntu

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •