[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: bezwzgledna sciezka do pliku



Dnia 24-07-2005, nie o godzinie 13:21 +0200, Marcin P. Kobierzycki
napisał(a): 
> On Sun, 24 Jul 2005 13:11:10 +0200, Marek Langiewicz wrote:
> 
> > jak mam sprawdzić w skrypcie bashowym czy w zmiennej mam plik ze
> > scieżką, czy nie? Dokumentacje basha na gnu.org czytam ale nie
> > wszystko kumam :(
> > (no wiem że to niewiele ma wspólnego z debianem ale tylko na
> > tą listę jestem zapisany)
> 
> Porównać wartość zmiennej i tego, co zwraca `basename $zmienna`.

no faktycznie. Tylko jak sobie to przemyślałem to to nie rozwiązuje
mojego problemu. Potrzebowałbym coś takiego co dla podanego pliku
(niezależnie od tego czy ze ścieżka, czy bez i czy z bezwzględną, czy
względną) zwraca pełną nazwę z bezwzględną ścieżką.
np:
cd /home/abigail
.vimrc               --> /home/abigail/.vimrc
../piotrek/.dc       --> /home/piotrek/.dc
./../../etc/../tmp   --> /tmp



A dla tych co mają dużo czasu i lubią poczytać o cudzych pewnie
głupawych problemach napiszę poniżej po co mi właściwie takie coś:
UWAGA: ten mail zrobił się długawy więc nie oczekuję że będziecie
to wszyscy czytać; ważne jest to co powyżej; dalsza część dla tych
co mają ochotę :)


Próbuję napisać skrypt który rozpakuje różne archiwa zależnie od ich
rozszerzeń. Skrypt tworzy podkatalog: <nazwa_archiwum>.dir i do niego
rozpakowuje dane archiwum. (żeby nie robić bałaganu)
No i napisałem ten skrypt ale w taki sposób, że działa tylko gdy jestem
w katalogu z danym archiwum i podam nazwę archiwum BEZ ścieżki.
A chciałbym to poprawić żeby można było podawać również nazwę ze
ścieżką. A oto ten skrypt:

#!/bin/bash
wyglada_na_archiwum () {
  case "$1" in
    *.[Tt][Aa][Rr].[Gg][Zz] | *.[Tt][Gg][Zz] ) return 0 ;;
    *.[Tt][Aa][Rr].[Bb][Zz]2 )                 return 0 ;;
    *.[Rr][Aa][Rr] )                           return 0 ;;
    *.[Aa][Cc][Ee] )                           return 0 ;;
    *.[Zz][Ii][Pp] )                           return 0 ;;
    *.[Aa][Rr][Jj] )                           return 0 ;;
    * ) return -1 ;;
  esac
}
tylko_rozpakuj_plik () { # rozpakowywuje do akt. katalogu
  case "$1" in
    *.[Tt][Aa][Rr].[Gg][Zz] | *.[Tt][Gg][Zz] ) tar -xzf "$1" ;;
    *.[Tt][Aa][Rr].[Bb][Zz]2 )                 tar -xjf "$1" ;;
    *.[Rr][Aa][Rr] )                           unrar x -o+ -inul "$1" ;;
    *.[Aa][Cc][Ee] )                           unace x -o+ -c- "$1" ;;
    *.[Zz][Ii][Pp] )                           unzip -o -q "$1" ;;
    *.[Aa][Rr][Jj] )                           arj x "$1" ;;
    * ) echo "Nieznany typ archiwum ($1) !" ; return -1 ;;
  esac
}
rozpakuj_plik () {
  local OLDDIR="$PWD"
  local FILE="$1"
  local DIR=${FILE}.dir
  if wyglada_na_archiwum "$FILE"
  then
    mkdir -p "$DIR" && cd "$DIR" && {
      echo -n "Rozpakowuję plik $FILE ... "
      tylko_rozpakuj_plik "$OLDDIR/$FILE"
      cd "$OLDDIR"
      echo "ok"
      return 0 
  }
  else
    echo "Nieznany typ archiwum ($1) !"
    return -1
  fi
}

for FILE
do
  rozpakuj_plik "$FILE"
done


To mój pierwszy skrypt (dłuższy niż 2 linijki) więc będę dzwięczny za
wszelkie uwagi.

Marek Langiewicz



Reply to: