-
Notifications
You must be signed in to change notification settings - Fork 6
/
2017-SE-04.sh
58 lines (50 loc) · 2.05 KB
/
2017-SE-04.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#!/bin/bash
if [[ $# -eq 0]]; then
echo "Invalid number of arguments"
exit 1
fi
if [[ ! -d $1 ]]; then
echo "Not a directory"
exit 2
fi
DIRECTORY=$1
BROKEN_LINKS=0
while read FILE TYPE ; do
if [[ $TYPE == 'N' ]]; then
if [[ ${#} -eq 2 ]]; then
echo "${FILE} -> $(readlink ${FILE})" >> ${2}
else
echo "${FILE} -> $(readlink ${FILE})"
fi
else
BROKEN_LINKS=$((BROKEN_LINKS + 1))
fi
done < <(find ${DIRECTORY} -type l -printf "%f %Y\n" 2>/dev/null)
#or
BROKEN_LINKS=$(find ${DIRECTORY} -type l -exec test ! -e {} \; -print 2>/dev/null | wc -l)
while read FILE ; do
if [[ ${#} -eq 2 ]]; then
echo "${FILE} -> $(readlink ${FILE})" >> ${2}
else
echo "${FILE} -> $(readlink ${FILE})"
fi
done < <(find ${DIRECTORY} -type l -exec test -e {} \; 2>/dev/null)
#or
if [[ ${#} -eq 2 ]]; then
find . -type l -exec test -e {} \; -print | xargs -I{} readlink {} | xargs -I{} basename {} >> ${2}
else
find . -type l -exec test -e {} \; -print | xargs -I{} readlink {} | xargs -I{} basename {}
fi
echo "\nBroken symlinks: ${BROKEN_LINKS}"
#Напишете shell script, който получава задължителен първи позиционен параметър
#– директория и незадължителен втори – име на файл. Скриптът трябва да намира в подадената
#директория и нейните под-директории всички symlink-ове и да извежда (при подаден аргумент
#файл – добавяйки към файла, а ако не е – на стандартния изход) за тях следната информация:
#• ако destination-a съществува – името на symlink-а -> името на destination-а;
#• броя на symlink-овете, чийто destination не съществува.
#Примерен изход:
#8
#lbaz -> /foo/bar/baz
#lqux -> ../../../qux
#lquux -> /foo/quux
#Broken symlinks: 34