понедельник, 8 сентября 2008 г.

Генератор случайного 8-ми символьного пароля

#!/bin/bash
MATRIX="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
LENGTH="8"
# ==> 'LENGTH' можно увеличить, для генерации более длинных паролей.

while [ "${n:=1}" -le "$LENGTH" ]
do
PASS="$PASS${MATRIX:$(($RANDOM%${#MATRIX})):1}"
# ==> echo "$PASS"
let n+=1
done

echo "$PASS"

exit 0

(c)Advanced Bash-Scripting Guide: Искусство
программирования на языке сценариев командной оболочки;
Версия 2.5 (15 февраля 2004)

суббота, 6 сентября 2008 г.

Find and rm

Найти файлы по шаблону и удалить их:
find . -name "шаблон" | while read f; do rm -r "$f" ; done

Upd
find / -name "*.*" -ok rm {} \;  -print

Помощник по find

среда, 3 сентября 2008 г.

Массовое переименование файлов

Понадобилось переименовать кучу файлов в переходя по директориям. Такое задание давали, когда принимали на работу, но я как то отморозился от него. А тут пришлось сделать. Нашел в книге по shell'у пример про переименование файлов и вывод дерева катологов. Соедив вместе получилось вот такое:

#!/bin/sh
search () {
for dir in `echo *`
do
if [ -d "$dir" ] ; then # ==> Если это каталог (-d)...
zz=0 # ==> Временная переменная, для сохранения уровня вложенности каталога.
while [ $zz != $deep ] # Keep track of inner nested loop.
do
zz=`expr $zz + 1` # ==> Нарастить zz.
done
if cd "$dir" ; then # ==> Если можно войти в каталог...
deep=`expr $deep + 1` # ==> Нарастить уровень вложенности.
search # рекурсия ;-)
numdirs=`expr $numdirs + 1` # ==> Нарастить счетчик каталогов.
fi
fi
done
##################переименовываем
for i in `ls | grep -e ".*\.tt"`
do
name=`echo "$i" | sed 's/ШАБЛОН_ДЛЯ_ЗАМЕНЫ/ЧЕМ_ЗАМЕНЯЕМ/'`
mv "$i" "$name" #если нужно оставить копию, то заменяем mv на cp
done
##########################################

cd .. # ==> Подняться на один уровень вверх.
if [ "$deep" ] ; then # ==> Если depth = 0 (возвращает TRUE)...
swfi=1 # ==> выставить признак окончания поиска.
fi
deep=`expr $deep - 1` # ==> Уменьшить уровень вложенности.
}
# - Main -
if [ $# = 0 ] ; then
cd `pwd` # ==> Если аргумент командной строки отсутствует, то используется текущий каталог.
else
cd $1 # ==> иначе перейти в заданный каталог.
fi
echo "Начальный каталог = `pwd`"
swfi=0 # ==> Признак завершения поиска.
deep=0 # ==> Уровень вложенности.
numdirs=0
zz=0

while [ "$swfi" != 1 ] # Пока поиск не закончен...
do
search # ==> Вызвать функцию поиска.
done
echo "Всего каталогов = $numdirs"

exit 0

запускаем его в нужной нам директории и все.