pubblicato Lunedì 05 Giugno del 2006 alle 17:28.

Lo script inserito sotto è uno G-script e serve per visualizzare la dimensione del contenuto di una o più directory alla volta senza operare in maniera ricorsiva nelle subdirectory.

#!/bin/bash
#
# AUTHOR: Maurizio di NuvoleSparse
#
# License: GNU General Public version 2 or any later version.
# This program comes with ABSOLUTELY NO WARRANTY; for details
# see the COPYING file or visit "http://www.gnu.org/licenses/gpl.html".
# This is free software, and you are welcome to redistribute it under
# certain conditions. See the GPL license for details. 
#
# Dependence:
#					gtkdialog

gui(){
export MAIN_DIALOG_text='
<vbox>
<notebook labels="'$1'|Errori">
<vbox>			
<edit>
<input file>/tmp/temp1</input>
<width>400</width><height>250</height>
</edit>
</vbox>
<vbox>
<edit>
<input file>/tmp/errors-dimensfiles.log</input>
<width>400</width><height>250</height>
</edit>
</vbox>
</notebook>
</vbox>
'
}

gui_text(){
export MAIN_DIALOG_text='
'$schede_text'
'$gui_text'
'$schede1_text'
'
}

echo > /tmp/temp
echo > /tmp/temp1
echo > /tmp/errors-dimensfiles.log

if [ $# -eq 0 ]; then
	gui_text="<vbox><text><label>DimensFiles</label></text>\
<frame Domanda><text><label>Non hai selezionato nessuna directory,\
vuoi processare la directory '$PWD'?</label></text></frame><hbox>\
<button ok></button><button cancel></button></hbox></vbox>"
	gui_text
	output_gui=`/usr/bin/gtkdialog --program=MAIN_DIALOG_text`

	if ! echo $output_gui | grep -q 'EXIT="Cancel"'; then
		cd "$PWD"		
		gui_text="<vbox><text><label>DimensFiles</label>\
</text><text><label>Attendere la lettura del contenuto di '$PWD'.\
</label></text></vbox>"
		gui_text
		gtkdialog --program=MAIN_DIALOG_text &
		PID=`pidof -s gtkdialog`
		ls -A "$PWD" > /tmp/temp		
		num_linea=1
		tot_linee_categorie=`wc -l /tmp/temp | awk '{ print $1 }'`
		until [ $num_linea -gt $tot_linee_categorie ]; do
			var="`sed -n "$num_linea"p /tmp/temp`"
			du -sh "$PWD/$var" 2>>/tmp/errors-dimensfiles.log\
>> /tmp/temp1			
			num_linea=$((num_linea+1))
		done
		du -sch "$PWD" 2>>/tmp/errors-dimensfiles.log | sed -n 2p\
>> /tmp/temp1		
		kill $PID		
		gui "$PWD"
		gtkdialog --program=MAIN_DIALOG_text
	fi
else
	until [ $# -eq 0 ]; do
		dir="$1"
		if [ -d "$dir" ]; then
		
			gui_text="<vbox><text><label>DimensFiles</label>\
</text><text><label>Attendere la lettura del contenuto di '$dir'.\
</label></text></vbox>"
			gui_text
			gtkdialog --program=MAIN_DIALOG_text &
			PID=`pidof -s gtkdialog`			
			ls -A "$dir" > /tmp/temp			
			echo > /tmp/temp1		
			num_linea=1
			tot_linee_categorie=`wc -l /tmp/temp | awk '{ print $1 }'`
			until [ $num_linea -gt $tot_linee_categorie ]; do
				var="`sed -n "$num_linea"p /tmp/temp`"

				du -sh "$dir/$var" 2>> \
/tmp/errors-dimensfiles.log >> /tmp/temp1				
				num_linea=$((num_linea+1))
			done
			du -sch "$dir" 2>>/tmp/errors-dimensfiles.log | \
sed -n 2p >> /tmp/temp1			
			kill $PID			
			gui "$dir"
			gtkdialog --program=MAIN_DIALOG_text
		else
			gui_text="<vbox><text><label>DimensFiles</label>\
</text>
<frame Errore><text><label>'$dir' non e' una directory</label></text>\
</frame>
<hbox><button ok></button></hbox></vbox>"
			gui_text
			/usr/bin/gtkdialog --program=MAIN_DIALOG_text
		fi
		shift
	done
fi

rm -f /tmp/temp
rm -f /tmp/temp1
rm -f /tmp/errors-dimensfiles.log
exit 0
Attenzione: gli script sono pubblicati SOLO a scopo dimostrativo (didattico) e ASSOLUTAMENTE SENZA GARANZIA: l'autore nega qualsiasi responsabilità di danni riscontrabili a seguito del loro uso (mancato funzionamento, errori ed eventuale perdita di dati, etc). Gli script sono pubblicati con la licenza d'uso GNU General Public License, peraltro ottenibile al seguente link GNU/GPL.

Aggiornamento del 04 Novembre 2006
Approfittando della novità di gtkdialog ho provato a dargli una bello scossone.
Gdimensfile 2 Gdimensfile 1

Aggiornamento del 26 Dicembre 2006
Ora, le interfaccie grafiche dello script sono interamente in gtkdialog. Ho rimosso le istruzioni in bash ciclo+read, esempio: cat file | while read variabile; do <azione> done ed è stato sostituito con ciclo+sed, cioè preleva ogni riga con sed, in quanto la reputo una soluzione più sicura.


powered by FreeFind
Il sito è una creazione di Maurizio... ed è pubblicato sotto una Licenza CC; esso non viene aggiornato
in maniera periodica, pertanto non può essere considerato un prodotto editoriale ai sensi della legge n. 62 del 7.03.2001.