2014-01-06 4 views
1

Мне нужен сценарий UNIX Kornshell (ksh), который подсчитывает количество файлов в каталоге. Если файлы превышают 20 файлов, то результаты электронной почты. Я хочу, чтобы сценарий запускался каждый час. У меня нет доступа к cron. Я несколько новичок в UNIX. Окно парня всю мою карьеру. Это то, что у меня есть до сих пор.UNIX Count Script

#!/bin/ksh 
# count.sh 

while : 
do 
for dir in /directory1/ 
do 
    echo "$dir `du $dir |wc -l`" 
done > ./message 
mailx -s 'Dir Count' [email protected] < ./message 
sleep 3600 
done 

Любая помощь очень ценится.

ответ

1

Команда du, как показано, будет создавать одну строку для каталога внутри целевого каталога, /directory1.

Ваш вопрос непонятен. В нем говорится «если файлы превышают 20 файлов», которые я интерпретирую как «если количество файлов превышает 20». Вы не имеете дело с файлами (в отличие от каталогов, FIFO и других типов), и вы не проверяете «более 20». Я собираюсь упростить вещи и предположим, что вы имеете в виду «если количество имен в каталоге превышает 20».

dir=/directory1/ 
while : 
do 
    names=$(ls "$dir" | wc -l) 
    if [ "$names" -gt 20 ] 
    then echo "$dir $names" | mailx -s 'Dir Count' [email protected] 
    fi 
    sleep 3600 
done 
+0

Возможно, 'printf '% s \ n" "$ dir"/* | wc -l', чтобы избежать [pesky 'ls' parsing] (http://mywiki.wooledge.org/ParsingLs) проблем? – tripleee

+0

Может быть ... в общем, что-то вроде этого может понадобиться, но это, вероятно, не проблема. –

+0

Если каталог большой и/или высокая загрузка, вы можете потратить более одного часа между прогонами. Возможно, подумайте о самораскладке ['at' job] (http://linux.die.net/man/1/at), если важно точное время. – tripleee

Смежные вопросы