Skrypty w powłoce BASH z wykorzystaniem polecenia FIND

Transkrypt

Skrypty w powłoce BASH z wykorzystaniem polecenia FIND
Skrypty w powłoce BASH z wykorzystaniem polecenia FIND
Skrypt nr 1
W zadanym drzewie katalogów znaleźć katalogi zawierające dokladnie $2 podkatalogów, które to katalogi wszyscy mogą czytać,
których grupa i inni nie mogą zapisywać i w których inni nie mają prawa wykonywania.
#!/bin/sh
if [ "$#" != 2 ]; then
echo "Skrypt uruchamiany z dwoma parametrami"
exit 1
fi
if [ ! -d $1 ]; then
echo "Podany katalog nie istnieje"
exit 2
fi
liczba=$((2+$2))
find $1 -type d -links $liczba -perm -u=r,g=r,o=r ! -perm +g=w,o=w ! -perm +o=x
Skrypt nr 2
Z drugiego katalogu ($2) wypisać dowiązania twarde do plików zawartych w pierwszym katalogu ($1).
#!/bin/sh
if [ "$#" != 2 ]; then
echo "Skrypt uruchamiany z dwoma parametrami"
exit 1
fi
if [ ! -d $1 ] || [ ! -d $2 ]; then
echo "Podany katalog nie istnieje"
exit 2
fi
find $1 -type f | while read zmienna
do
find $2 -type f -samefile $zmienna
done
Skrypt nr 3
W zadanym drzewie katalogów $1 znajdź pliki utworzone po pewnym czasie $2, pliki utowrzone przed pewnym czasem $3. Pliki te
mają być regularne, czytelne przez wszystkich, mają być niezapisywalne przez o (others).
#!/bin/sh
if [ "$#" != 3 ]; then
echo "Skrypt uruchamiany z trzema parametrami"
exit 1
fi
if [ ! -d $1 ] || [ ! -d $2 ]; then
echo "Podany katalog nie istnieje"
exit 2
fi
find $1 -type f ! -perm -002 -perm -444 -cmin +$2 -cmin -$3 -print
lub
find $1 -type f -perm -u=r,g=r,o=r ! -perm +o=x -cmin +$2 -cmin -$3 -print
Skrypt nr 4
Skrypt ma za zadanie wyszukać katalogi, który są czytelne dla wszystkich, zapis i wykonanie ma wlaściciel, ale nie koniecznie inni.
Katalog musi mieć co najmniej dwa podkatalogi.
#!/bin/sh
if [ "$#" != 1 ]; then
echo "Skrypt uruchamiany z parametrem"
exit 1
fi
if [ ! -d $1 ]; then
echo "Podany katalog nie istnieje"
exit 2
fi
find $1 -type d -links +3 -perm -744 -printf
%m\\t%P\\n
Skrypt nr 5
W zadanym drzewie katalogów znaleźć pliki regularne większe od $2 i mniejsze od $3, do których właściciel ma prawa rwx, grupa
lub inni mają prawo read.
#!/bin/sh
if [ $# != 3 ] ; then
echo "Wywolanie: sh $0 katalog rozmiar1 rozmiar2"
exit 1
fi
if [ ! -d $1 ] ; then
echo "Podany katalog nie istnieje"
exit 2
fi
if [ ! $2 -lt $3 ] ; then
echo "Źle zdefiniowano przedział"
exit 3
fi
find $1 -type f -size +$2c -size -$3c -perm -700 -perm +044 -print
Skrypt nr 6
W zadanym drzewie katalogów znaleźć pliki o identycznej zawartości i przerobić je na dowiązania twarde do tej zawartości. Nie
sprawdzać już istniejących dowiązań twardych.
#!/bin/sh
if [ $# != 1 ] ; then
echo "Wywolanie: sh $0 katalog rozmiar1 rozmiar2"
exit 1
fi
if [ ! -d $1 ] ; then
echo "Katalog nie istnieje"
exit 2
fi
find $1 -type f -printf "%s %p\\n" | while read zm1 zm2
do
find $1 -type f -size $zm1 -not -samefile $zm2 | while read zm3
do
cmp -s $zm2 $zm3
if [ $? = 0 ] ; then
rm -f $zm3
ln $zm2 $zm3
fi
done
done
Skrypt nr 7
Przeszukaj ścieżkę i wypisz wszystkie te katalogi, których rozmiar jest większy niż zadana w parametrze ilość kB. Uwaga: raz
wypisane katalogi nie liczą się do katalogu nadrzędnego.
#!/bin/sh
if [ $# != 1 ] ; then
echo "Wywolanie: sh $0 katalog rozmiar1 rozmiar2"
exit 1
fi
if [ ! -d $1 ] ; then
echo "Katalog nie istnieje"
exit 2
fi
find $1 -type d -print | while read zm1
do
rozmiar=0
find $zm1 -maxdepth 1 -printf "%s\\n" | (while read zm2
do
(( rozmiar=$rozmiar+$zm2 ))
done
if [ $rozmiar -gt $2 ] ; then
echo $zm1
fi
)
done
2
Skrypt nr 8
Wypisac wszystkie sciezki, które powtarzają się w obu drzewach.
#!/bin/sh
if [ $# != 2 ] ; then
echo "Wywolanie: sh $0 katalog rozmiar1 rozmiar2"
exit 1
fi
if [ ! -d $1 ] || [ ! -d $2 ] ; then
echo "Katalog nie istnieje"
exit 2
fi
find $1 $2 -printf "%P\n" | sort | uniq -d
Skrypt nr 9
Dla zadanych 2 drzew katalogów znaleźć dowiązania symboliczne wskazujące na katalogi poza tymi drzewami i wylistować te, które
mają linki z obu drzew.
#!/bin/sh
if [ $# != 2 ] ; then
echo "Wywolanie: sh $0 katalog rozmiar1 rozmiar2"
exit 1
fi
if [ ! -d $1 ] || [ ! -d $2 ] ; then
echo "Katalog nie istnieje"
exit 2
fi
dir1=‘readlink -f $1‘
dir2=‘readlink -f $2‘
find $1 $2 -type l -print | while read zm1
do
if [ -z ‘readlink -f $zm1 | grep -e "^$dir1/"‘ ] && [ -z ‘readlink -f
$zm1| grep -e "^$dir2/"‘ ] ; then
if [ ! -z ‘echo $zm1 | grep -e "^$1/"‘ ] ; then
echo "‘readlink -f $zm1‘ $dir1"
else
echo "‘readlink -f $zm1‘ $dir2"
fi
fi
done | sort | uniq | cut -f1 -d’ ’ | sort | uniq -d
Skrypt nr 10
W zadanym katalogu znaleźć pliki, których użytkownik jest inny niż użytkownik katalogu.
#!/bin/sh
if [ $# != 2 ] ; then
echo "Wywolanie: sh $0 katalog rozmiar1 rozmiar2"
exit 1
fi
if [ ! -d $1 ]; then
echo "Katalog nie istnieje"
exit 2
fi
find $1 -type f -printf "%U %p\\n" | while read zm1 zm2
do
path=‘dirname $zm2‘
if [ ! $zm1 -eq ‘find $path -maxdepth 0 -printf "%U"‘ ]; then
echo $zm2
fi
done
3