Nowe posty

Autor Wątek: skrypt, zliczanie plików debian, problem ze składnią  (Przeczytany 3764 razy)

Bloodneo

  • Gość
Witam mam problem z skryptem. Potrzebuje skryptu który będzie automatycznie liczył ile plików znajduje się w katalogu podanym jako pierwszy parametr skryptu, a jako drugi parametr podawanie jest rozszerzenie pliku.

#!/bin/bash

DIR=$1
FIND=$2
COUNT=0

if [ "$FIND" != "" ]
then

for file in $1*
do
NAME=`echo $file | cut -d'.' -f2`
EXT=`echo $file | cut -d'.' -f3`

if [ "$EXT" == "$FIND" ]
then
echo "Plik " $NAME"."$EXT
COUNT=${COUNT+1}
fi
done
else
echo "Brak parametru skladnia: "
exit 1
fi

if [ "$FIND" != "" ]
then
echo
echo "Ilosc plikow: " $COUNT
fi
exit 0

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
skrypt, zliczanie plików debian, problem ze składnią
« Odpowiedź #1 dnia: 2011-12-03, 15:00:05 »
Nie łatwiej to zrobić findem:
find "$DIR" -name "*.$EXT" -type f | wc -l

Bloodneo

  • Gość
skrypt, zliczanie plików debian, problem ze składnią
« Odpowiedź #2 dnia: 2011-12-03, 15:12:11 »
Muszę pozostać przy mojej formie. Niżej zamieściłem podgląd sytuacji :/


darkdancer

  • Gość
skrypt, zliczanie plików debian, problem ze składnią
« Odpowiedź #3 dnia: 2011-12-03, 16:23:40 »
#!/bin/bash

DIR=$1
FIND=$2
COUNT=0

if [ "$FIND" != "" ]
then

    for file in $1/*
    do
        NAME=`echo $file | cut -d'.' -f1`
        EXT=`echo $file | cut -d'.' -f2`

        if [ "$EXT" == "$FIND" ]
        then
            echo "Plik " $NAME"."$EXT
            COUNT=$((COUNT+1))
        fi
    done
else
    echo "Brak parametru skladnia: "
    exit 1
fi

if [ "$FIND" != "" ]
then
    echo
    echo "Ilosc plikow: " $COUNT
fi
exit 0

Bloodneo

  • Gość
skrypt, zliczanie plików debian, problem ze składnią
« Odpowiedź #4 dnia: 2011-12-03, 16:28:06 »
Dzięki za pomoc

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
skrypt, zliczanie plików debian, problem ze składnią
« Odpowiedź #5 dnia: 2011-12-03, 18:06:16 »
Sprawdzeń tego $FIND trochę za dużo. Wystarczy tak:
#!/bin/bash

DIR=$1
FIND=$2
COUNT=0

if [ "$FIND" = "" ]; then
    echo "Brak parametru skladnia: "
    exit 1
fi

for file in $1/*; do
    NAME=`echo $file | cut -d'.' -f1`
    EXT=`echo $file | cut -d'.' -f2`

    if [ "$EXT" = "$FIND" ]; then
        echo "Plik " $NAME"."$EXT
        COUNT=$((COUNT+1))
    fi
done

echo
echo "Ilosc plikow: " $COUNT

exit 0
Poza tym zamiast sprawdzać rozszerzenie po wyszukaniu, możesz (znacznie szybciej) od razu wyszukać pliki tylko z danym rozszerzeniem:
for file in "$1/*.$FIND"
A skoro już (całkiem słusznie) przypisujesz parametry linii poleceń do zmiennych, to powyżej nie $1 tylko $DIR.

EDIT: Co do samego wyciągania ścieżki pliku, nazwy i rozszerzenia warto użyć poleceń basename i dirname zamiast męczyć się z ręczną obróbką stringa.

EDIT2: Drobna poprawka: do porównywania stringów za pomocą test (czyli "[ ... ]") lepiej używać pojedynczego =. Podwójne działają tylko w Bashu, a pojedynczy jest bardziej przenośny (np. sh).

arctgx

  • Gość
skrypt, zliczanie plików debian, problem ze składnią
« Odpowiedź #6 dnia: 2011-12-03, 20:23:25 »
Cytat: ultr
EDIT: Co do samego wyciągania ścieżki pliku, nazwy i rozszerzenia warto użyć poleceń basename i dirname zamiast męczyć się z ręczną obróbką stringa.
...albo wypróbować postacie "${sciezka%/*}" i "${sciezka##*/}".