Witam serdecznie. Ostatnio zrobiłem dwa skrypty w bash:

#!/bin/bash
#Pass path as an argument to script ./cleaner /path/to/cleaning
#create 124MB filename.gz -> fallocate -l 124M filename.gz
echo "Script for deleting not necessary archived log files."
cd $1

function clearFiles()
{
    for directory in *
    do
        if [ -d "$directory" ] && [ ! -L "$directory" ]
        then
            cd $directory
            x="*.gz"

            for plik in $x
            do
                if [ -e $plik ]
                then
                    echo "LogFile '$plik' exists and can be deleted"
                    echo "Deleting file $plik":
                    #rm $plik
                    echo -ne '##               (20%)\r'
                    sleep 0.5
                    echo -ne '####             (40%)\r'
                    sleep 0.5
                    echo -ne '######           (60%)\r'
                    sleep 0.5
                    echo -ne '########         (80%)\r'
                    sleep 0.5
                    echo -ne '##########       (100%)\r'
                    echo -ne '\n'
                    echo -e "$plik deleted \n"
                else
                    echo "I think in $directory currently is nothing to delete."
                fi
                #clearFiles
            done
            #clearFiles
            cd ..
            #clearFiles
        else
            echo "$directory does not contain any archived file or it's a file."
        fi
    done
    echo "Script is finishing his job."
}

#Call function
clearFiles

oraz

#!/bin/bash

#Script for removing trashes after deinstalled old kernels by apt-get autoremove

function progressBar()
{
    echo -ne "Please wait\n"
    while true
    do
        echo -n "#"
        sleep 2
    done
}

function clearOldKernel()
{
    x=$(dpkg --list | grep -i linux-image | grep ^rc | awk '{print $2}')

    #if [ ${#x[@]} -gt 0 ]
    if [ -z "$x" ]
    then
        echo "Your system has not any old kernels to deletion."
    else
        echo "Below is the list of old kernels:"
        echo " "
        echo "$x"
        echo " "
        for plik in $x
        do
            echo "Do you want remove $plik? (answer <yes> or hit enter if not sure)"
            read answer
            if [ "$answer" = "yes" ]
            then
                echo "Deleting file $plik":
                apt-get --purge remove $plik
                echo -e "$plik deleted \n"
            else
                echo "You wasn't sure you want remove old kernels."
                exit 1
            fi
        done
    fi
    echo
    echo "-------------------------------------------------------------- "
    echo "I have done my job, cya later."
}

#Start in background
progressBar &

#Save PID progressBar to variable
MYSELF=$!

#call clearing function
clearOldKernel

#kill progressBar function
kill $MYSELF > /dev/null 2>&1

Założeniem pierwszego skryptu jest usuwanie plików zarchiwizowanych w katalogu w podanej ścieżce jako parametr skryptu. Ogólnie wszystko gra, ale skrypt nie potrafi wejść do katalogu znajdującego się w katalogu w celu ewentualnego usunięcia śmieci. Pytanie jak to należy zrobić?
Natomiast drugi skrypt ma na celu usunięcie śmieci pozostałych po usunięciu starych wersji kernela linuxa. Jest jednak mały "smaczek" - przynajmniej z założenia. Otóż w trakcie usuwania danego "śmiecia" pojawić się powinien pasek postępu, który co 2s dorzuca kolejnego hasha w konsoli. Ciężko opisać co się dzieje i jak to wygląda, więc bardzo będę wdzięczny jeśli po prostu uruchomicie ów skrypt. Możecie zakomentować linię "apt-get --purge remove $plik", aby nic się nie usuwało, a jedynie pojawiły się odpowiednie komunikaty.

Mam też trzeci skrypt, na bazie którego powstał ten do usuwania śmieci po kernelach i tam elegancko działa rysowanie progress bara - również możecie go przetestować tylko funkcji "backup" trzeba zapewnić istniejące (najlepiej większe komendą np. fallocate -l 124M filename.gz) pliki:

#!/bin/bash

function progress()
{
   echo -ne "Please wait\n"
   while true
   do
      echo -n "#"
      sleep 3
   done
}

function backup()
{
    tar -cvf test.tar test >/dev/null 2>&1
}

#Start in background
progress &

#Save progress() PID to variable - need to use the PID to kill the progress func
MYSELF=$!

#Start doing backup - call function
backup

echo
echo "done"

# Kill progress
kill $MYSELF > /dev/null 2>&1