>[оверквотинг удален]
> 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