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
"
- 1188 megtekintés
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!
- A hozzászóláshoz be kell jelentkezni
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
- A hozzászóláshoz be kell jelentkezni
$line -nek mi lesz az érteke? a megtalált symlink? és le is törli?
- A hozzászóláshoz be kell jelentkezni
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.
- A hozzászóláshoz be kell jelentkezni
find "$DIRECTORY" -follow -type l | while read line ; do rm "$line"; done
tehát ha beírom ezt a sort, akkor a $Directory könyvtártól rekurzuvan megnéz minden fájlt és a broken symlinkeket pedig ki is törli?
- A hozzászóláshoz be kell jelentkezni
pontosan.
- A hozzászóláshoz be kell jelentkezni
sajnos nem csinálja
azért köszönöm
- A hozzászóláshoz be kell jelentkezni
és mit csinál a '| while read line ... ' nélkül?
- A hozzászóláshoz be kell jelentkezni
pontosan mit írjak?
azután mindent hagyjak ki?
- A hozzászóláshoz be kell jelentkezni
mkdir tmp
--
cd tmp
mkdir dir
mkdir dir2
ln -s ../dir2 dir/dir2
ln -s x dir2/broken
ln -s y dir/broken
touch dir/z
ln -s z dir/lz
find dir -follow -type l
mi a kimenete?
- A hozzászóláshoz be kell jelentkezni
find: ./die/broken:Nincs ilyen fájl vagy könyvtár
find: ./broken: Nincs ilyen fájl vagy könyvtár
ezt írja
- A hozzászóláshoz be kell jelentkezni
find: dir/broken:Nincs ilyen fájl vagy könyvtár
find: dir/dir2/broken: Nincs ilyen fájl vagy könyvtár
na ezt írja pontsan
- A hozzászóláshoz be kell jelentkezni
köszönöm a segítséget és jóéjszakát
- A hozzászóláshoz be kell jelentkezni
aha, másik verzió...
- A hozzászóláshoz be kell jelentkezni