Skrypt przegląda rekurencyjnie podfoldery dla podanego folderu i tworzy listę zajętościową plików. Program jest nieodporny na spacje w nazwach folderów. Nie mam pojęcia co robię źle, ale w obecnej formie skrypt nie działa. Gdy zakomentujemy wywołanie funkcji podkat, elegancko wypisuje liste dla podanego folderu. Natomiast gdy wywołujemy podkat, a nie sortujemy w funkcji wypisz, to też ładnie wypisuje, z tymże nieposortowane. Proszę o wskazanie błędu, z góry dziękuję i przepraszam za styl...
#!/bin/bash
if [ -d $1 ]
then
awk -vARG1=$1 'BEGIN{
i = 0
while (("ls -o "ARG1"" | getline) > 0){
if (NF > 2){
i++
tab[i,2] = $3
if(substr($1,1,1) == "-"){
tab[i,1] = $4
tab[i,3] = "-"
tab[i,4] = $NF
} else if(substr($1,1,1) == "d") {tab[i,3] ="d" ; tab[i,4] = $NF; tab[i,1] = zlicz(ARG1 "/" $NF)}
else if(substr($1,1,1) == "l"){
tab[i,1] = $4
tab[i,3] = "l"
tab[i,4] = $NF}
}}
close ("ls -o");
wypisz(i, ARG1, tab);
podkat(tab, ARG1, i)
} #zakonczenie begina
function wypisz(ile_l, nazwa, tab1){
print("\nLista zajetosciowa dla folderu: ", nazwa );
printf("%-15s", "zajetosc w B") ;
printf("%-12s", "uzytkownik") ;
printf("%-7s", "rodzaj") ;
printf("%-20s\n", "nazwa pliku");
for(k = 1; k<=ile_l; k++){printf "%-15s %-12s %-7s %-20s\n", tab1[k,1] , tab1[k,2] , tab1[k,3] , tab1[k,4] | "sort -nr -k 1,1"}
return}
function zlicz(kat, suma){
#close("ls -o")
while(("ls -o "kat"" | getline) > 0){
if (substr($1,1,1) == "d"){
suma+=zlicz(kat "/" $NF)
} else {suma+= $4}
}
#close("ls -o");
return suma
}
function podkat(tab, nazwa, dlugosc, tab2){
for(i = 1; i<=dlugosc; i++){
if(tab[i,3] == "d"){
j=0
while (("ls -o "nazwa tab[i,4]"" | getline) > 0){
if(NF > 3){
j++
tab2[j,2] = $3
if(substr($1,1,1) == "-"){
tab2[j,1] = $4
tab2[j,3] = "-"
tab2[j,4] = $NF
}else if(substr($1,1,1) == "d") {tab2[j,3] ="d" ; tab2[j,4] = $NF; tab2[j,1] = zlicz(nazwa tab[i,4] "/" $NF)}
else if(substr($1,1,1) == "l"){
tab2[j,1] = $4
tab2[j,3] = "l"
tab2[j,4] = $NF}
}#zamyka ifa
}#zamyka whilea
close ("ls -o");
#wypisz(j, nazwa tab[i,4], tab2)
}#zamykajacy ifa
}#zamykajacy fora
}#zamykajacy funkcje
' #zakonczenie awk
else
echo "Podano ścieżke do katalogu, który nie istnieje"
fi