#!/bin/bash # # Skrypt jest nakladka semigraficzna na program find(1), w zalozeniu # upraszczajaca uzywanie tegoz (a to sie w ogole da?). # # Skrypt bedzie dzialac poprawnie tylko w srodowisku GNU (znaczy pod # Linuksem), gdyz wykorzystuje rozszerzenie GNU programu date, jak i program # dialog(1), nie wystepujacy w standardzie uniksa (np. w Solarisie) # # Skrypt jest na licencji GNU GPL (dowolnej wersji). Po tresc licencji udaj # sie na www.gnu.org # wspolne opcje dla wszystkich okienek DIALOG_OPTS='--cancel-label Anuluj --ok-label OK' # gdzie szukamy? KATALOG=`dialog $DIALOG_OPTS \ --inputbox 'Gdzie mam zaczac szukac?' 8 70 / \ 2>&1` || exit 0 # opcje szukania OPCJE=`dialog $DIALOG_OPTS \ --checklist 'Wedlug czego chcesz szukac pliku?' 11 50 4 \ fname 'Nazwa pliku' on \ owner 'Wlasciciel' off \ perms 'Uprawnienia' off \ date 'Czas modyfikacji' off \ 2>&1` || exit 0 # jesli szukamy po nazwie, to okienko dialogowe na maske if echo "$OPCJE" | grep fname > /dev/null 2>&1; then NAZWA_PLIKU=`dialog $DIALOG_OPTS \ --inputbox 'Podaj maske' 8 70 "*" \ 2>&1` || exit 0 fi # jesli szukamy po wlascicielu, to okienko dialogowe na wlasciciela if echo "$OPCJE" | grep owner > /dev/null 2>&1; then WLASCICIEL=`dialog $DIALOG_OPTS \ --inputbox 'Kto ma byc wlascicielem?' 8 70 "$USER" \ 2>&1` || exit 0 fi # jesli szukamy po prawach dostepu, to okienko dialogowe na te prawa if echo "$OPCJE" | grep perms > /dev/null 2>&1; then UPRAWNIENIA=`dialog $DIALOG_OPTS \ --checklist 'Jakie uprawnienia ma miec plik?' 16 50 9 \ 0400 'Wlasciciel ma prawo odczytu' no \ 0200 'Wlasciciel ma prawo zapisu' no \ 0100 'Wlasciciel ma prawo wykonywania' no \ 0040 'Grupa ma prawo odczytu' no \ 0020 'Grupa ma prawo zapisu' no \ 0010 'Grupa ma prawo wykonywania' no \ 0004 'Reszta ma prawo odczytu' no \ 0002 'Reszta ma prawo zapisu' no \ 0001 'Reszta ma prawo wykonywania' no \ 2>&1` || exit 0 # dodajemy do siebie uprawnienia UPRAWNIENIA=$((`echo "$UPRAWNIENIA" | sed 's/" "0*/+/g' | sed 's/"0*//g'`)) # zamieniamy na czterocyfrowa postac osemkowa UPRAWNIENIA=`printf '%04d' "$UPRAWNIENIA"` fi # jesli szukamy po dacie modyfikacji, to okienko dialogowe na czas if echo "$OPCJE" | grep date > /dev/null 2>&1; then DATA=`dialog $DIALOG_OPTS \ --calendar 'Kiedy plik byl zmieniany?' 5 40 \ 2>&1` || exit 0 # zmieniamy zapis daty z DD/MM/YY na MM/DD/YY (uzywany przez date(1)) DATA=`echo $DATA | awk -F/ '{print $2 "/" $1 "/" $3}'` # ustalamy, ile dni temu to bylo DATA=$(( ( `date +%s` - `date -d $DATA +%s` ) / 86400 )) # dowiadujemy sie, czy szukamy starszych plikow if dialog $DIALOG_OPTS --yesno "Szukac pliku starszego?" 5 30; then DATA="+$DATA" else DATA="-$DATA" fi fi # spajamy wszystkie opcje KOMENDA="find '$KATALOG'" test -n "$NAZWA_PLIKU" && KOMENDA="$KOMENDA -name '$NAZWA_PLIKU'" test -n "$UPRAWNIENIA" && KOMENDA="$KOMENDA -perm '-$UPRAWNIENIA'" test -n "$WLASCICIEL" && KOMENDA="$KOMENDA -user '$WLASCICIEL'" test -n "$DATA" && KOMENDA="$KOMENDA -mtime '$DATA'" # dowiadujemy sie, gdzie wladowac wyniki if dialog $DIALOG_OPTS --defaultno --yesno \ "Zapisac wyniki do pliku?" 5 30; then # jak sie plik ma nazywac? PLIK_WYNIKOWY=`dialog $DIALOG_OPTS \ --inputbox 'Gdzie zapisac wyniki?' 8 70 "wynik.txt" \ 2>&1` fi if [ -n "$PLIK_WYNIKOWY" ]; then KOMENDA="$KOMENDA > '$PLIK_WYNIKOWY'" else KOMENDA="$KOMENDA | less -E" fi clear # wykonujemy polecenie eval "$KOMENDA"