Linux.org.ua
Технічні питання => Розробка => Гілку створено: Yola від 2012-02-07 14:42:20
-
Наступний код зациклюється на "."? Я ж вставив перевірку...
r ()
{
if [ -f "$1/lock" ]; then
echo $1/lock
fi;
echo $1
for d in $(ls $1 -a)
do
if [[ $d!="." && $d!=".." ]]; then
if [[ -d "$d" ]]; then
echo "<<$d>>"
( r "$d" )
fi;
fi;
done
}
r .
-
Поки що дійшов до цього:
r ()
{
if [ -f "lock" ]; then
echo `pwd`"/lock"
fi;
cd $1
for d in $(ls -a)
do
if [ $d != '.' ]; then
if [ $d != '..' ]; then
if [ -d "$d" ]; then
( r "$d" )
fi;
fi;
fi;
done
}
r .
Виводить потрібні файли, але чомусь по 4 рази...
-
#!/bin/bash
set -ue
r() {
local DIR="$1"
[ -d "$DIR" ] || return
if [ -f "$DIR/lock" ]
then
echo "$DIR/lock"
fi
local DIRENTRY
for DIRENTRY in "$DIR"/.* "$DIR"/*
do
case "$DIRENTRY" in
.|..|*/.|*/..) continue ;;
esac
if [ -d "$DIRENTRY" ]
then
echo "<<$DIRENTRY>>"
r "$DIRENTRY"
else
echo " $DIRENTRY"
fi
done
}
r "$@"
-
Ви ніндзя!!! Але чому в моєму коді по чотири рази, дуже цікаво))
Все зараз розберусь, це відбувається за кількістю підтек у теки з файлом.
Розібрався!!! Перевірку на наявність файлу треба було ставити після переходу по cd.
-
Не зовсім відповідь на ваше питання, але я би зробив це на основі find -type d -print0 | xargs -0 script.sh
Зокрема, даний конкретний код можна замінити просто find -type f -name 'lock'