Strona 1 z 1

Bash - skrypt do czyszczenia kompa

: 05 sty 2012, 18:58
autor: Magic91
Witam !

Na początek dodam, ze jestem bardzo początkujący i nie do końca jeszcze ogarniam co i jak z bashem :)
Na zaliczenie robie skrypt mający na celu "czyścić" kompa z zbędnych elementów. Teoretycznie wszystko działa ale mam kilka problemów, z którymi nie potrafię sobie poradzić.

1. Chciałbym aby skrypt znajdował i usuwał puste pliki i foldery. Aktualnie mam tylko coś takiego:
find $HOME -type d -empty -delete
działa jedynie na foldery i nie wiem jak wyszukać pliki które są puste.
No i jeszcze zastanawiam się czy usunięcie WSZYSTKICH pustych folderów (ew. plików) nie sprawi że w systemie powstaną jakieś komplikacje ?

2. Kolejna sprawa to to aby skrypt znajdował i usuwał pliki z których nikt nie korzystał np. od 2 miesiecy
find $HOME -type f -mtime +60 -delete
Niestety tu mam także podobny problem. Skrypt znajduje WSZYSTKIE pliki z których dawno nikt nie korzystał. Da się jakoś temu zaradzić aby nie były usuwane najważniejsze rzeczy niezbędne do funkcjonowania systemu?

3. Miło by było gdyby w skrypcie pojawiła się opcja wyszukiwania i usuwania duplikatów ale nie mam pojęcia jak to zrobić... Jest jakaś funkcja którą można to zrobić? Czy trzeba na piechotę sprawdzać każdy plik z każdym ?

4. W tabelce Dialog czasem wyszukuje tak dużo plików, że nie mieszczą się w oknie. (np. wyświetla tylko 21% znalezionych plików) Czy da można zrobić coś aby tabelkę dało radę "scrollować" ?

Gdyby ktoś był w stanie mi pomóc w czymkolwiek z powyższych punktów byłbym bardzo wdzięczny. :) Szukałem już w googlach ale nie wszystko udało mi się znaleźć dlatego postanowiłem napisać tutaj. Jeśli to w czymś pomoże to dołączam mój skrypt. Dla bezpieczeństwa puki co komendy usuwające pliki są w komentarzach. Z góry dziękuje za każdą pomoc


#!/bin/bash

clear

touch .skrypt.txt
touch .wynik.txt
x=0;
y=`cat .skrypt.txt` # 0 - pyta sie / 1 - nie pyta sie

#----------------------------------------------------------------------
dialog --msgbox "Witaj w Bash Cleaner v 1.0! \n- - - by Pawel Zygar - - - " 6 31

if [ $y = 1 ]
then
clear
dialog --msgbox " ! ! ! UWAGA ! ! !
\nProgram nie bedzie sie pytal o potwierdzenie usuniecia plikow!
\n\nAby to zmienic wejdz w ustawienia " 9 37
else
echo 0 > .skrypt.txt
fi
#----------------------------------------------------------------------

while [ $x -le 5 ]; do

y=`cat .skrypt.txt`
clear

dialog --title "BASH CLEANER" \
--backtitle "BashCleaner v.1.0" \
--menu "Co chcesz zrobic?" 16 60 7 \
1 "Znajdz i usun pliki tymczasowe" \
2 "Znajdz i usun puste foldery" \
3 "Znajdz i usun pliki i foldery nie uzywane" \
4 "Wyczysc wszystko! (wykonaj wszystko powyzej)" \
5 "Ustawienia" \
6 "Zakoncz" 2>.wynik.txt
x=`cat .wynik.txt`

case "$x" in
#----------------------------------------------------------------------

"1")

if [ $y = 1 ]
then
# find $HOME -name '*.tmp' -delete
clear
dialog --msgbox "Pliki tymczasowe *.tmp zostaly usuniete! " 7 30
else
dialog --title "Czy chcesz usunac te pliki tymczasow?" \
--backtitle "BashCleaner v.1.0" \
--yesno "Znalezione pliki to: \n `find $HOME -name '*.tmp' -exec echo "\n" {} \; `" 30 90
fi
case $? in
0)
# find $HOME -name '*.tmp' -delete
clear
dialog --msgbox "Pliki tymczasowe *.tmp zostaly usuniete! " 7 30 ;;
1)
dialog --msgbox "Pliki NIE zostaly usuniete. " 7 30 ;;
esac ;;



#------------------------------

"2")

if [ $y = 1 ]
then
# find $HOME -type d -empty -delete
clear
dialog --msgbox "Puste foldery zostaly usuniete! " 7 30

else
dialog --title "Czy chcesz usunac te puste foldery?" \
--backtitle "BashCleaner v.1.0" \
--yesno "Znalezione pliki to: \n `find $HOME -type d -empty -exec echo "\n" {} \; `" 30 90
fi
case $? in
0)
# find $HOME -type d -empty -delete
clear
dialog --msgbox "Puste foldery zostaly usuniete! " 7 30 ;;
1)
dialog --msgbox "Puste foldery NIE zostaly usuniete. " 7 30 ;;
esac ;;


#------------------------------

"3")

if [ $y = 1 ]
then
# find $HOME -type f -mtime +60
clear
dialog --msgbox "Pliki nieuzywane od 2 miesiecy zostaly usuniete! " 7 30

else

dialog --title "Czy chcesz usunac te pliki? (nieuzywane od conajmniej 2 miesiecy) " \
--backtitle "BashCleaner v.1.0" \
--yesno "Znalezione pliki to: \n `find $HOME -type f -mtime +60 -exec echo "\n" {} \; `" 30 90
fi
case $? in
0)
# find $HOME -type f -mtime +60
clear
dialog --msgbox "Pliki nieuzywane od 2 miesiecy zostaly usuniete! " 7 30 ;;
1)
dialog --msgbox "Pliki NIE zostaly usuniete. " 7 30 ;;
esac ;;


#------------------------------

"4")

if [ $y = 1 ]
then
# find $HOME -name '*.tmp' -delete
# find $HOME -type d -empty -delete
# find $HOME -type f -mtime +60 -delete

clear
dialog --msgbox "Pliki tymczasowe *.tmp, puste foldery oraz pliki nieuzywane zostaly usuniete! " 8 $

else
dialog --title "Czy chcesz usunac wszystkie zbedne pliki i foldery?" \
--backtitle "BashCleaner v.1.0" \
--yesno "Znalezione pliki to: \n
`find $HOME -name '*.tmp' -exec echo "\n" {} \; `
`find $HOME -type d -empty -exec echo "\n" {} \; `
`find $HOME -type f -mtime +60 -exec echo "\n" {} \; `
" 30 90
fi
case $? in
0)
# find $HOME -name '*.tmp' -delete
# find $HOME -type d -empty -delete
# find $HOME -type f -mtime +60 -delete

clear
dialog --msgbox "Pliki tymczasowe *.tmp, puste foldery oraz pliki nieuzywane zostaly usun$
1)
dialog --msgbox "Pliki NIE zostaly usuniete. " 7 30 ;;
esac ;;


#------------------------------

"5")
dialog --title "Ustawienia" \
--backtitle "BashCleaner v.1.0" \
--yesno "Czy program ma za kazdym razem pytac sie o potwierdzenie usuniecia plikow lub folderow?
\n\n ! ! ! UWAGA ! ! !
\nJesli wylaczysz ta opcje pliki beda usowane automatycznie po wybraniu opcji 1 - 4 " 13 40

case $? in
0)
echo 0 > .skrypt.txt
clear
dialog --msgbox "Program bedzie pytal sie o potwierdzenie usuniecia plikow lub folderow "$
1)
echo 1 > .skrypt.txt
dialog --msgbox "Prpgram NIE bedzie pytal sie o potwierdzenie usuniecie plikow lub folder$
esac ;;

#------------------------------

*) echo "Nic nie wybrales"
esac
done
rm .wynik.txt
clear

Re: Bash - skrypt do czyszczenia kompa

: 16 sty 2012, 01:20
autor: TJB
Jak chodzi o szukanie i find'a polecam: viewtopic.php?f=145&t=154098
Są tam linki z przykładami.

No i niezawodne man find :-)
Magic91 pisze: 1. Chciałbym aby skrypt znajdował i usuwał puste pliki i foldery. Aktualnie mam tylko coś takiego:
find $HOME -type d -empty -delete
działa jedynie na foldery i nie wiem jak wyszukać pliki które są puste.
Kiedy piszesz -type d każesz find'owi skoncentrować się tylko na folderach. Chcesz pliki - pisz f. File vs directory.
Magic91 pisze: No i jeszcze zastanawiam się czy usunięcie WSZYSTKICH pustych folderów (ew. plików) nie sprawi że w systemie powstaną jakieś komplikacje ?
Hmmm... szukasz w katalogu domowym. Jakie tam masz puste foldery, których usunięcie wpłynie na działanie systemu? Dopóki ograniczasz się do katalogu domowego, możesz najwyżej (a i to jest mało prawdopodobne) utrudnić działanie jakiejś aplikacji.

Magic91 pisze: 2. Kolejna sprawa to to aby skrypt znajdował i usuwał pliki z których nikt nie korzystał np. od 2 miesiecy
find $HOME -type f -mtime +60 -delete
Niestety tu mam także podobny problem. Skrypt znajduje WSZYSTKIE pliki z których dawno nikt nie korzystał. Da się jakoś temu zaradzić aby nie były usuwane najważniejsze rzeczy niezbędne do funkcjonowania systemu?
Wszystkie? Jakoś wątpię. Raczej wszystkie znajdujące się w ścieżce $HOME, czyli najpewniej /home/TwójUżytkownik/...

Doczytaj man find. Zobacz jaka jest różnica między wprowadzaniem liczb +60, -60 i dokładnie 60.
Magic91 pisze: 3. Miło by było gdyby w skrypcie pojawiła się opcja wyszukiwania i usuwania duplikatów ale nie mam pojęcia jak to zrobić... Jest jakaś funkcja którą można to zrobić? Czy trzeba na piechotę sprawdzać każdy plik z każdym ?
Co jest dla Ciebie duplikatem? Bo od tego zależy jak się za to zabrać.

No i zerknij tu: http://www.pixelbeat.org/fslint/
Magic91 pisze: 4. W tabelce Dialog czasem wyszukuje tak dużo plików, że nie mieszczą się w oknie. (np. wyświetla tylko 21% znalezionych plików) Czy da można zrobić coś aby tabelkę dało radę "scrollować" ?
Tu nie umiem pomóc. Dopiero dziś zobaczyłem takie coś jak dialog. :-) Patrzyłeś na man dialog to?