S.O.S.

S.O.S.
helo

szeretnék egy kis
segítséget
kérni mert
van egy scriptem ami fut meg jo elvileg de megis kidom +ba egy hibauzenetet! te értesz hozzá? éjfélig kellene elkuldenem a tanarnak kulonben bukta a félév!
előre is koszi a segítséget

#!/bin/bash
#A script a paraméterben megadott könyvtárban megvizsgálja, hogy van-e
#événytelen szimbolkus link és ha ilyet talál, azt törli. Legyen lehetőség
#rekurziv hívásra és a műveletek logolására(egy fájlba). Ha nem adunk meg elé
#rési utat, akkor az alapértelmezett legyen a ,,.".
# lcl -R -l LOGFILE /home/h481815/OKTATAS

function errormsg(){
echo "Hiba történt!"
echo "Használat:"
echo "hk [-R] [-l logfile] [DIRECTORY]"
exit 1;
}

# Alepértelmezett értékek
DIRECTORY="."
RECURSIVE=1
HAVETOLOG=1;

# Paraméterek lekezelése
while [ $# -gt 0 ]; do
if [ $1 = "-R" ]; then
RECURSIVE=0
elif [ $1 = "-l" ]; then
HAVETOLOG=0;
shift
LOGFILENAME=$1
elif [ -d $1 ]; then
DIRECTORY=$1
else
errormsg
fi
shift
done

# nem rekurziv
if [ $RECURSIVE -eq 1 ]; then
for LINK in ` ls -log $DIRECTORY | grep ^l | awk '{print $6}' `;do
cd $DIRECTORY
test -e $LINK
a=$?
if test $a -eq 0
then
if [ $HAVETOLOG -eq 0 ];then
echo "$LINK symlink" >> $LOGFILENAME
fi
else
if [ $HAVETOLOG -eq 0 ];then
echo "$LINK not symbolic link and deleted" >> $LOGFILENAME
fi
rm $LINK
fi
done

else #rekurziv
touch output.txt
for LINK in ` ls -lRog $DIRECTORY | grep ^l | awk '{print $6}' `;do
for i in ` find $DIRECTORY $LINK | grep $LINK `;do
DIR=` dirname $i `
cd $DIR
test -e $LINK
a=$?
if test $a -eq 0
then
if [ $HAVETOLOG -eq 0 ];then
echo "$DIR/$LINK symlink" >> $LOGFILENAME
fi
else
rm $LINK
if [ $HAVETOLOG -eq 0 ];then
echo "$DIR/$LINK not symbolic link and deleted" >> $LOGFILENAME
fi
fi
done
done
fi
exit 0

a hibauzenet:
find: feladatok.txt: Nincs ilyen fájl vagy könyvtár

a problemam az hogy van egy fajlom(egy broken symbolic link), aminek tudom a nevét, de nem tudom az elérési útját, és kiszeretném torolni. Van erre parancs??
erre hasznaltam a find-ot és lehet hogy ez a hiba

amit keresek, torolni szeretnek, annak a nevet hova irjam?, ez leellenorzi hogy link -e?
"
#FIND_OPTS='-follow -type l' # ez pedig igen

find "$DIRECTORY" $FIND_OPTS | while read line ; do rm "$line"; done
"

Hozzászólások

Sajnálom, hogy egyelőre nem tudok tippet adni a megoldáshoz. De szerintem hasznos lenne bemásolni azt a bizonyos hibaüzenetet, hátha úgy beugrana valakinek a megoldás!

nem nagyon akarom végignézni, hogy hol rossz, de egy tippet tudok adni:


FIND_OPTS='-maxdepth 1 -follow -type l'    # ez nem rekurziv
#FIND_OPTS='-follow -type l'               # ez pedig igen

find "$DIRECTORY" $FIND_OPTS | while read line ; do rm "$line"; done

igen, de vigyázz az idézőjelekkel. "$line" -nak az értéke a broken symlink lesz. az rm meg törli.

különben olvasd el a find man-ját, abban benne van, hogy a 'find -type l' a symlinkeket találja meg. ha viszont a -follow opciót is használod, akkor csak a broken symlinkeket találja meg.