The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Рекурсивный обход поддерикторий"
Отправлено CROSP, 19-Окт-14 13:36 
>[оверквотинг удален]
>  if [ ! -e "${DIR}" ]; then
>   echo 1>&2 "${DIR}: No such file ir directory";
>   continue;
>  fi
>  if [ ! -d "${DIR}" ]; then
>   echo 1>&2 "${DIR} is a file, not a directory";
>   continue;
>  fi
>  (discover "${DIR}");
> done

Спасибо ВАМ огромное за помощь и объяснения, вроде все понял, только один момент еще, в кода написал.
И подскажите пожалуйста, все равно скрипт добавляет в файл BigList папки где меньше 10 файлов. Я вот тут дописал вывод файлов для каждой директории.
Подскажите пожалуйста из-за чего так. Еще такой момент тут с переменными как-то не так как обычно привык. До того как сделал переменную FILE_STR локальной, выводило список повторяющихся файлов по пути обхода. Соответственно поэтому и попадает в BigList.Подскажите что тут не так и спасибо еще раз.
#!/bin/bash
NUM=10
BIG_LIST="${PWD}/BigList";
SHORT_LIST="${PWD}/ShortList";
discover() {
    cd "${1}";
    
    # На случай, если по каким-либо причинам не удаётся перейти в диреторию.
    if [ $? -ne 0 ]; then
        echo 1>&2 "Cannot change working directory to ${1}";
        return 1;
    fi
    
    DIR="${PWD}";

    for FILE in .* *; do
        if [ "${FILE}" = "." -o "${FILE}" = ".." ]; then
            continue;
        fi

        if [ -d "${FILE}" ]; then
            # Включая директории.
            # COUNT=$((${COUNT:-0}+1));
            if [ ! -x "${FILE}" ]; then
                echo 1>&2 "${FILE}: no execute (or search) permission on file";
            else
                (discover "${FILE}");
            fi
        else
    COUNT=$((${COUNT:-0}+1));
   local FILE_STR+='file : '$FILE'\n';
        fi
    done
    
    if [ "${COUNT:-0}" -gt "${NUM}" ]; then
        echo "${DIR}" >> "${BIG_LIST}";
    echo -e "${FILE_STR}" >> "${BIG_LIST}";
    FILE_STR="";
    else
        echo "${DIR}" >> "${SHORT_LIST}";
    echo -e "${FILE_STR}" >> "${SHORT_LIST}";
    FILE_STR="";
    fi
}
#Если есть хоть один аргумент командного файла
if [ -z "${*}" ]; then
#Если нету, то устанавливаем текущий каталог. В какую переменную ?  
set "${PWD}";
fi
rm BigList
rm ShortList
# Что означает символ @ в данном случае ? первую переменную ?
for DIR in "${@}"; do
    if [ ! -e "${DIR}" ]; then
        echo 1>&2 "${DIR}: No such file ir directory";
        continue;
    fi
    
    if [ ! -d "${DIR}" ]; then
        echo 1>&2 "${DIR} is a file, not a directory";
        continue;
    fi
    
    (discover "${DIR}");    
    
done

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру