Автоматизация в Linux с помощью shell
Материал из OSZone.net wiki.
Вот назрела необходимость сделать свою работу более удобной. Поэтому начал заниматься скриптописанием на shell и вот что из этого вышло :)
Описание скрипта
Поставленная задача: есть некий каталог, внутри которого располагается куча других каталогов. А уже в них, в свою очередь, находятся файлы двух типов: с расширением *.readme и с расширением *.tar.gz.
Основная задача скрипта следующая: нужно пройтись по всем подпапкам основной папки (пока таких подпапок около 30, но будет около 700 - вручную уже трудновато будет ;)) и сделать следующее: если в подпапке есть папка readme, тогда вообще пропустить эту папку. В противном случае:
1. Создать папку readme
2. Перенести в созданную папку все файлы с расширением *.readme
Затем выйти из папки, зайти в следующую и повторить то же самое - если есть readme, то пропустить, в противном случае повторить шаг 1 и 2.
Как я всё это сделал можно посмотреть в скрипте. В этом скрипте есть только один недостаток: если файлов с расширением *.readme нет и папки тоже нет, он создаст папку и выдаст сообщение о том, что нет файлов с расширением *.readme. Работа скрипта продолжится, но этот небольшой баг я пока не сумел поправить.
Содержимое скрипта
cd /CPAN
echo "Теперь текущий каталог `pwd`"
objects=`ls`
obj=($objects)
for i in ${obj[@]}
do
if test -d $i
then
echo "Переходим в каталог $i..."
cd $i
dirobjects=`ls`
dirs=($dirobjects)
for g in ${dirs[@]}
do
if [ $g = "readme" ]
then
readme="1"
break
else
readme="-1"
fi
done
if [ $readme = "1" ]
then
echo "Папка readme присутствует, пропускаем обработку"
elif [ $readme = "-1" ]
then
echo "Создаём папку readme..."
mkdir "readme"
echo "Переносим все справочные файлы в эту папку..."
mv -iv --target-directory="readme" *.readme
fi
cd ..
else
echo "File detected..."
fi
done

