#1 19.12.06 21:32
Помогите написать программку на Cshell.
Нужно: Обойти рекурсивно заданный аргументом каталог и распечатать на консоль количество встретившихся каталогов.
Причем, нужно не с помощью встроенных команд, типа find, т.е. программка должна быть не в одну строчку, а с помощью простейших команд Unix.
Offline
#3 19.12.06 22:07
Re: Помогите написать программку на Cshell.
Нет, нужно только количество встретившихся каталогов по пути, пока мы "шли" к данному каталогу)
Offline
#4 19.12.06 22:08
Re: Помогите написать программку на Cshell.
Вообщем вникай - год назад писал. Штука при рекурсивном обходе выдаёт каталоги, где кол-во файла варьируеццо от 15 до 30. Думаю, сама сможешь подправить, что нужно ;)
Код::
#!/bin/bash
#Function description
search()
{
#Initializing settings
dir_name=$1
dir_quant=0
file_quant=0
#Start to calculate
cd $1
if [ $? -eq 0 ]
then
for data in *
do
if [ -d $data ]
then
search $data
fi
file_quant=`ls -l |grep ^- |wc -l`
done
if [ $file_quant -ge 15 -a $file_quant -le 30 ]
then
echo "`pwd`$file_quant" >> ~/search.result
fi
cd ..
fi
}
#Start
2>/dev/null
rm ~/search.result
#Checking for correct input data
if [ $# -eq 1 ]
then
search $1
else
echo "Sorry, but this programm should have one parameter!"
fiOffline
#7 19.12.06 23:34
Re: Помогите написать программку на Cshell.
Ой... как сложно все. Неужели нельзя проще?
Код: bash:
#обнули переменную for i in `ls -1`; do if [ -d $i ]; then #увеличивай переменную на 1 cd $i #запускай этот же файл снова cd .. echo ***In folder: $i <столько-то> субфолдеров*** fi done
Исправлено asp (19.12.06 23:35)
Offline
#10 20.12.06 22:26
Re: Помогите написать программку на Cshell.
а как снова запустить тот файл?
Offline
#11 21.12.06 13:52
Re: Помогите написать программку на Cshell.
по абсолютному пути. Если он у тебя /home/user/script то так и запускай:
Код: bash:
... cd $i /home/user/script #этот же файл снова cd .. ...
Или если все равно параметр передавать, можно не цд, а сразу:
Код: bash:
... if [ -d $i ]; then #увеличивай переменную на 1 /home/user/script $i echo ***In folder: $i <столько-то> субфолдеров*** fi ...
Только тогда проверь параметры для ls
P.S.:
Как вариант - возвращать значение скриптом. Тогда будет рекурсия элегантней смотреться:
Код: bash:
echo ***In folder: $i `/home/user/script $i` субфолдеров***
Исправлено asp (21.12.06 13:57)
Offline

