Nowe posty

Autor Wątek: Prosty skrypt w tcsh  (Przeczytany 2229 razy)

piterssen21

  • Gość
Prosty skrypt w tcsh
« dnia: 2011-12-22, 13:27:24 »
Witam,
czy ktos moglby poprawic ten skrypt tak aby dzialal poprawnie? :
Skrypt ma przyjmowac jeden parametr i w podanym przez nas katalogu zliczac ilosc katalogow i plikow. Problem jest taki ze skrypt liczy mi wszystko zamiast oddzielnie liczyc katalogi i pliki.
Oto skrypt:

#!/bin/tcsh
if ( $#argv == 0 ) then
echo "Nie podales zadnego argumentu"
exit 2
else
set katalog = 0
set plik = 0
set lista=`ls -R $1`

foreach zmienna ($lista)
if (-f $zmienna) then
@ plik = $plik + 1
else
@ katalog = $katalog + 1
endif
end
endif
echo "W podanym katalogu jest $katalog katalogow i $plik plikow."
exit 0

  • Gość
Prosty skrypt w tcsh
« Odpowiedź #1 dnia: 2011-12-22, 13:48:28 »
U mnie działa "poprawnie":
$ ./plik.tcsh  ./
ls: nie można otworzyć katalogu ./kde-kdm: Brak dostępu
ls: nie można otworzyć katalogu ./ksocket-kdm: Brak dostępu
W podanym katalogu jest 28 katalogow i 5 plikow.
$ ls -R
.:
akonadi-minio.wBXQoC     kde-minio      napis        pulse-ZzsRwpC5iUza                    ssh-JVqLSaqx1948
birthday-22.12.11-18314  ksocket-kdm    orbit-minio  qtsingleapp-homemi-d2e2-3e8           virt_1111
kde-kdm                  ksocket-minio  plik.tcsh    qtsingleapp-homemi-d2e2-3e8-lockfile  virtuoso_hX2701.ini

./akonadi-minio.wBXQoC:
akonadiserver.socket  mysql.socket
ls: nie można otworzyć katalogu ./kde-kdm: Brak dostępu

./kde-minio:
closeditems

./kde-minio/closeditems:
_1.94
ls: nie można otworzyć katalogu ./ksocket-kdm: Brak dostępu

./ksocket-minio:
kdeinit4__0  kio_http_cache_cleaner  klauncherMT2048.slave-socket  KSMserver__0  nepomuk-socket

./orbit-minio:

./pulse-ZzsRwpC5iUza:

./ssh-JVqLSaqx1948:
agent.1948
Problemem jest raczej to, że katalogi liczy podwójnie (ponieważ ls -R podaje ich nazwy dwukrotnie, tylko w odmiennych kontekstach).

Zamiast korzystać z ls -R powinieneś wykorzystać jakąś wbudowaną funkcję tcsh do iterowania po wszystkich elementach listy, gdzie listą byłyby wszystkie pliki w katalogu. Ponieważ w katalogu może być katalog, taka funkcja pewnie powinna być uruchamiana rekurencyjnie. Konkretnej konstrukcji nie podam, ponieważ nie znam tcsh, ale spodziewam się, że takie rzeczy są opisane w kursach dla początkujących.