BASH możliwość wyboru przez użtkownika co zrobić z plikiem

0

Cześć,

mam pewne zadanie do napisania używając BASH.

.Napisz skrypt wyszukujący w katalogu > domowym użytkownika (/home/username) wszystkie pliki o rozmiarze większym od 100 KB. Po znalezieniu pliku, daj użytkownikowi możliwość wyboru: usunięcia, kompresji lub pozostawienia pliku, po czym przejdź do następnego pliku. Zapisz do pliku dziennika wszystkie usunięte pliki wraz z czasem ich usunięcia.

Napisałem skrypt który wyszukuje w katalogu odpowiednie pliki ale nie wiem jak zaimplementować możliwość wyboru dla użytkownika. Możecie pomóc? Czy w jakiś sposob może pomóc mi polecenie read answer?

2

Napisałem skrypt który wyszukuje w katalogu odpowiednie pliki ale nie wiem jak zaimplementować możliwość wyboru dla użytkownika.

No to pokaz, co już masz. Bo na razie to wygląda nie jak prośba o pomoc, ale raczej próba wyłudzenia gotowca.

P.S. Aneczka - ale piszesz o sobie w formie męskiej. Kolejna ofiara LGBT? :P

3

Proste menu tworzy się poleceniem select

select nazwa [in lista]
do
	instrukcje mogące używać $nazwa
done
  • select iteruje po tablicy jak for
  • generuje pozycję menu dla każdego elementu listy i poprzedza je numerem
  • oczekuje wybrania numeru
  • przypisuje wybraną wartość zmiennej $nazwa i zapisuje wybrany numer w zmiennej wbudowanej REPLY
  • wykonuje instrukcje w ciele konstrukcji
  • powtarza proces w nieskończoność
  • break z tego wychodzi
  • zmienna PS3 trzyma prompt (domyślnie "#?")

Przykład

select_options=("Option 1" "Option 2" "Option 3")

function foo {
    PS3='Select an option: '
    IFS=
	select sel in "${select_options[@]}";
	do
		if [ $sel ]
		then
			echo "Selected option $REPLY with value $sel"
			break
		else
			echo "Incorrect option"
		fi			
	done
}

foo
0

@cerrato: to po prostu słownik. Tutaj kod (dwie wersje) którego używam do wyszukiwania i usunięcia wyszukanych plików:

find /home/user -type f -size +100k -exec rm -/ interface{}\ ;

find /home/user -type f -size +100k -delete
Ale nie wiem jak dać taką możliwość użytkownikowi.

2

Powinnam te wyniki które uzyskuje funkcja find wrzucić do jakiejś tablicy i iterować tablice?

Iterowanie po plikach wygląda tak:

find . -type f -print0 | while IFS= read -r -d '' file; do
    echo "$file"
done

Istotne jest użycie flagi -print0 polecenia find, które używa bajtu NULL jako delimitera plików i opcji -d w poleceniu read w celu odczytu całego tekstu do zmienne do czasu znalezienia NULL-a. Dzięki temu poprawnie odczytywane są pliki o dziwnych nazwach, na przykład zawierających spacje lub nowe linie (domyślnie find i read dzielą swoje wejście przy użyciu nowej linii, nazwy plików mogą jednak również zawierać nowe linie). Należy również wyzerować IFS aby nie były ścinane białe znaki. Opcja -r blokuje interpretację backslashy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1