Страница 1 из 1

Bash скрипт

Добавлено: 04 мар 2012, 23:07
123456789igor
Есть пример. Но не могу разобраться с ним. Если не тяжело обьясните как работает эта программа и напишите комментарии.
Linux Bash.
Условие:
Написать скрипт находящий в заданном каталоге и всех его подкаталогах все файлы, владельцем которых является заданный пользователь. Имя владельца и каталог задаются пользователем в качестве первого и второго аргумента командной строки. Скрипт выводит результаты в файл (третий аргумент командной строки) в виде полный путь, имя файла, его размер. На консоль выводится общее число просмотренных файлов.

Код: Выделить всё

#!/bin/bash
 
if [[ ! -d $2 ]] ;
then
    echo "Путь $2 не существует или не является каталогом"
    exit 1
fi
 
search ()
{
    if [ ! -r $2 ];
    then #нет доступа
        echo "$2 Ошибка. Нет Доступа"
    else 
    for f in $(ls $2)
    do
        if [ -d $2/$f ]; then 
            search $1 "$2/$f" $3
        else
            if [ $1 = $( stat "$2/$f" -c %U ) ]; then
                if [ "$filescount" -eq "0" ]; then
                    echo $2/$f $( stat $2/$f -c %s) >  "$3" 
                else
                    echo $2/$f $( stat $2/$f -c %s) >> "$3"
                fi
            let "filescount=filescount+1"
            fi
        fi
        done  
    fi
}
 
let "filescount=0"
search $@ 2>/dev/null
echo "$filescount файлов найдено"

Re: Bash скрипт

Добавлено: 05 мар 2012, 00:05
rain
Чего люди не делают, лишь бы find не пользоваться...

bla() { find "${2}" -type f -user "${1}" > "${3}" ; }

Обвязку добавить по желанию

Re: Bash скрипт

Добавлено: 05 мар 2012, 00:16
123456789igor
то код:

Код: Выделить всё

#!/bin/bash
find $1 -type f -user $2 -printf "%h%f %s\n" | tee -a $3 | wc -l

это выполнение:

Код: Выделить всё

./new1.sh /home/mydir user /home/myder/1.txt

это результат:
wc: неверный ключ -- "1"

Re: Bash скрипт

Добавлено: 05 мар 2012, 00:21
rain
УМВР, только у тебя формат в printf'e кривой. И да, почему у тебя в коде -l, а wc ругается на единицу?