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: