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