Witam,
Potrzebuje wykonać skrypt powłoki bash, który będzie wykonywał poniższą instrukcję:
Napisać skrypt, który zmieni nazwy plików i katalogów, z katalogu podanego przez użytkownika.
a) Jeżeli nazwa jest małymi literami to na taką samą dużymi literami.
b) Jeżeli pierwszy znak nazwy to duża litera to zamieni ją na cyfrę.
Wzór:
Dokumenty 1okumenty
zadanie ZADANIE
ASD 123
Skrypt, który stworzyłem nie działa poprawnie. Jeżeli folder, który podaje jest z małych liter to zmienia je poprawnie na duże Identycznie jeżeli wszystkie litery są duże (zamienia poprawnie na cyfry). Jeżeli nazwa jest z dużej litery (pierwszy znak), zmienia nazwę folderu głównego poprawnie, ale zwraca też przy tym błąd “mv: cannot stat ‘Nazwa’ : no such file or directory”.
W żadnym przypadku nie zmienia jednak nazw zawartych w środku katalogów i plików.
Z góry dzięki, za pomoc w poprawieniu.
EDIT:
Poprawiłem lekko kod. Zmienia poprawnie nazwę folderu głównego. Niestety nie zmienia nazw w jego wnętrzu. Problem pewnie tkwi w pętlach, ale nie daje ich rady poprawić. Liczę na Waszą pomoc, w skryptach bash jestem początkujący.
#!/bin/bash
#Wczytanie nazwy folderu głównego
read of
#Zmiana jego nazwy wg instrukcji
if [-d $of]
then
while true; do
na=`echo -n "$of" | tr A-Z 1-9`;
nf=`echo -n "$of" | tr a-z A-Z`;
if ["$na" != "$of"];
then
mv -- "$of" "$na"
nowy="$na"
break
fi
if ["$nf" != "$of"];
then
mv -- "$of" "$nf"
nowy="$nf"
break
fi
done
echo Zmieniona nazwa katalogu głównego $nowy
else
echo 'blad'
fi
#Instrukcje do zmiany nazw całej zawartości naszego folderu głównego.
DIR=/home/andrzej/$nowy
for i in $DIR/*
do
for of in $i
do
while true; do
na=`echo -n "$of" | tr A-Z 1-9`;
nf=`echo -n "$of" | tr a-z A-Z`;
if ["$na" != "$of"];
then
mv -- "$of" "$na"
break
fi
if ["$nf" != "$of"];
then
mv -- "$of" "$nf"
break
fi
done
done
done