Pagina 1 di 1

[Desktop] Un file-manager ...particolare

Inviato: martedì 23 settembre 2008, 17:57
da xymaster
Vi invio lo script zenity_file.sh da copiare in /usr/locale/bin ed a cui bisogna dare in fase d'installazione il comando
# chmod +x /usr/locale/bin/zenity.sh
per renderlo eseguibile in una shell da cui lanciarlo con il comando
#sudo zenity_file.sh.
E' un file manager per UBUNTU/DEBIAN utilizzante applicativo zenity gia' compreso almeno in UBUNTU 8.04,
che consente di scegliere un file navigando tra i vari supporti del sistema e di eseguire su esso operazioni di backup, rinomina, cancella, copia, sposta, modifica permessi,cambio proprietario e/o gruppo, Visualizza, Edit, Esegue
Se vuoi eseguire una di queste operazioni su files di qualsiasi tipo con diritti di ROOT, clicca su OK, altrimenti su ANNULLA per terminarne l'esecuzione

Codice: Seleziona tutto

if [ "$editor" = "" ];then
	editor1=`which gedit`
	editor2=`which kedit`
	editor3=`which mcedit`
	editor4=`which vi`
	editor=""
	if [ "$editor1" ];then
		editor="gedit"
	elif [ "$editor2" ];then
		editor="gedit"
	elif [ "$editor3" ];then
		editor="luit -encoding ISO-8859-1 mcedit"
	elif [ "$editor4" ];then
		editor="vi"
	else
		editor="less"
	fi
fi
#----------------------------------------------------------------------
my_help () {
msg_help="\nQuesto script consente di scegliere un file navigando tra i vari supporti del sistema\n
e di eseguire su esso operazioni di backup, rinomina, cancella, copia, sposta, modifica permessi,
cambio proprietario e/o gruppo, Visualizza, Edit, Esegue\n
Se vuoi eseguire una di queste operazioni su files di qualsiasi tipo con diritti di ROOT, clicca su OK,\n
altrimenti su ANNULLA per terminarne l'esecuzione\n"

if domanda "$msg_help";then
return
else
exit
fi
}
errore () {
#chiamare con descrizione errore e dare subito dopo continue se in un ciclo
	zenity --error --text="$1"
}

avviso () {
#chiamare con testo messaggio
	zenity --info --text="$1"
}
domanda () {
#chiamare con testo domanda
	zenity --question --text "$1"
	return $?
}

multiple_opz_file () {
#chiamare con pathname completo del file, tipo operazione("b"=backup,"c"=copia,"m"=move,"d"=delete,"p"=proprietario)
local tipo_msg=""
local nome_file="$(basename "$1")"
for operazione in $2;do
	if [ $operazione = "b" ];then
		cp -p $1 $1.backup
		tipo_msg="Backup"
	elif [ $operazione = "d" ];then
		local file_name="$(basename "$1")"
		domanda "Vuoi cancellare il file \"$file_name\?"
		if [ "$?" -eq 0 ];then
			rm -f "$1"
		fi
		tipo_msg="Cancellazione"
	elif [ $operazione = "c" ];then
		dir_dest=`zenity --title "Seleziona Directory destinazione" --file-selection --directory`
		if [ -e "$dir_dest/$nome_file" ];then
			avviso "La $dir_dest contiene gia\` il file $nome_file\nAnnullo la copia"
			return
		else
			cp -fp $1 $dir_dest
		fi
		tipo_msg="Copia"
	elif [ $operazione = "m" ];then
		dir_dest=`zenity --title "Seleziona Directory destinazione" --file-selection --directory`
		if [ -e "$dir_dest/$nome_file" ];then
			avviso "La $dir_dest contiene gia\` il file $nome_file\nAnnullo lo spostamento"
			return
		else
		mv -f $1 $dir_dest
		tipo_msg="Spostamento"
		fi
	elif [ $operazione = "p" ];then
		tipo_msg="Cambio Proprietario e Gruppo"
		local old_proprietario=`ls -l $1 | cut -f3 -d" "`
		local old_gruppo=`ls -l $1 | cut -f4 -d" "`
		local elenco=`awk -F: '($3<=1500) { print $1}' /etc/passwd | sort -u`
		local lista=""
		# echo "${elenco[@]}" visualizza tutti gli elementi dell'array elenco
		for n in `echo "${elenco[@]}"`
		do
		i=`echo "false $n "`
		lista+=$i
		done
 		local new_proprietario=`zenity  --list  --text "Lista proprietari\nPremi SPAZIO per selezionare un proprietario.\nClicca su OK per terminare" --radiolist  --column "clicca" --column "proprietari" --separator " " $lista`
 		
		elenco=$(awk -F: '($3<=1500) { print $1}' /etc/group | sort -u)
		lista=""
		for n in `echo "${elenco[@]}"`
		do
		i=`echo "false $n "`
		lista+=$i
		done
		new_gruppo=`zenity  --list  --text "Lista gruppi\nPremi SPAZIO per selezionare un gruppo.\nClicca su OK per terminare" --radiolist  --column "clicca" --column "gruppi" $lista --separator " "`
		if [ "$new_proprietario" = "" -o "$new_gruppo" = "" ];then
		errore "Proprietario e/o Gruppo non selezionati.Annullo operazione"
		return 
		fi
		if domanda "Vuoi cambiare proprietario da '$old_proprietario' a '$new_proprietario'\n e gruppo da '$old_gruppo' a '$new_gruppo' ?";then
		chown $new_proprietario:$new_gruppo $1
		else
		return
		fi
fi		
done
if [ "$?" -eq 0 ];then
	avviso "$tipo_msg $nome_file OK"
else 
	errore "$tipo_msg $nome_file Fallito"
fi
}
rename_file () {
# chiamare con pathname completo
local dir_file="$(dirname "$1")"
local old_name="$(basename "$1")"
local new_name=""
if new_name=`zenity --entry --width=300 --title="Rename file" --text="Inserisci il nome del nuovo file" --entry-text="$old_name"`;then
#sostituisce spazi nel nome file con carattere _
new_name=`echo "$new_name" | sed "s/[^a-zA-Z0-9_-]/_/g"`
if [ -e "$dir_file/$new_name" ];then
avviso "Il nome richiesto, \"$new_name\" e\` gia\` assegnato a un documento esistente"
else
if mv -f "$1" "$dir_file/$new_name";then
avviso "$old_name cambiato in $new_name"
else
errore "$old_name NON CAMBIATO!"
fi
fi
else
errore "Errore nella funzione"
fi
}

function permessi_file (){
# chiamata con pathname completo
old_permessi=`ls -l $1 | cut -c2-10`
proprietario=`ls -l $1 | cut -f3 -d" "`
gruppo=`ls -l $1 | cut -f4 -d" "`
c=0
lista=""
tipo=""
while [  $c -lt 9 ]; do
	i=`echo "${old_permessi:c:1}"`
	case $c in
		0)tipo="letturaProprietario";;
		1)tipo="scritturaProprietario";;
		2)tipo="esecuzioneProprietario";;
		3)tipo="letturaGruppo";;
		4)tipo="scritturaGruppo";;
		5)tipo="esecuzioneGruppo";;
		6)tipo="letturaAltri";;
		7)tipo="scritturaAltri";;
		8)tipo="esecuzioneAltri";;
	esac
	if [ $i != "-" ];then
		i="TRUE \"$tipo\" "
	else
		i="FALSE \"$tipo\" "
	fi
	lista+=$i
	let c=c+1 
done
if ans=$(zenity  --list  --text "Permessi del file:$old_permessi\nProprietario: $proprietario\nGruppo: $gruppo\nPremi SPAZIO per mettere/togliere un permesso.\nClicca su OK per terminare" --checklist  --column "Pick" --column "permessi" $lista --separator " ");then
	permessi_user=("u=" "-" "-" "-")
	permessi_gruppo=("g=" "-" "-" "-")
	permessi_altri=("o=" "-" "-" "-")
	for letto in $ans;do
		if [ $letto = "\"letturaProprietario\"" ];then
			permessi_user[1]="r"
		elif [ "$letto" = "\"scritturaProprietario\"" ];then
			permessi_user[2]="w"
		elif [ "$letto" = "\"esecuzioneProprietario\"" ];then
			permessi_user[3]="x"
		elif [ "$letto" = "\"letturaGruppo\"" ];then
			permessi_gruppo[1]="r"
		elif [ "$letto" = "\"scritturaGruppo\"" ];then
			permessi_gruppo[2]="w"
		elif [ "$letto" = "\"esecuzioneGruppo\"" ];then
			permessi_gruppo[3]="x"
		elif [ "$letto" = "\"letturaAltri\"" ];then
			permessi_altri[1]="r"
		elif [ "$letto" = "\"scritturaAltri\"" ];then
			permessi_altri[2]="w"
		elif [ "$letto" = "\"esecuzioneAltri\"" ];then
			permessi_altri[3]="x"
		fi
	done
permessi_user=`echo "${permessi_user[@]}"`
permessi_gruppo=`echo "${permessi_gruppo[@]}"`
permessi_altri=`echo "${permessi_altri[@]}"`

permessi_user=`echo ${permessi_user//-/}`
permessi_user=`echo ${permessi_user// /}`
permessi_gruppo=`echo ${permessi_gruppo//-/}`
permessi_gruppo=`echo ${permessi_gruppo// /}`
permessi_altri=`echo ${permessi_altri//-/}`
permessi_altri=`echo ${permessi_altri// /}`
domanda "Vuoi sostituire\nVecchi permessi: $old_permessi \ncon\n Nuovi permessi: $permessi_user $permessi_gruppo $permessi_altri \n?"
	case $? in
		0)chmod $permessi_user $1;chmod $permessi_gruppo $1;chmod $permessi_altri $1;break;;
	esac
fi
return 
}

function select_opz_file (){
# chiamata con nome file, pathname completo ed ultimo carattere del file
if [ "$3" = "@" ];then
	d=$(ls -l "$2")
	#trova ultimo campo con separatore spazio
	link_file=${d##* }
	avviso "$dir_init$fileread e' un Link a\n$link_file"
	return
fi
opzioni="false Backup_file false Rinomina_file false Cancella_file false Copia_file false Sposta_file false Permessi_file false Cambio_Proprietario false Visualizza_in_pannello false Apri_file"

if [ "$3" = "*" -o "$3" = "h" ];then
	opzioni="false Backup_file false Rinomina_file false Cancella_file false Copia_file false Sposta_file false Permessi_file false Cambio_Proprietario false Visualizza_in_pannello false Apri_file false Lancia_file" 
fi
nome_file=$(basename "$2")
menu=` zenity --title "Opzioni file $nome_file" --list --radiolist --column="clicca " --column="opzione scelta" $opzioni `
while true; do
	case $menu in
		Backup_file)
		multiple_opz_file "$2" "b";break;;
		Rinomina_file)rename_file "$2";break;;
		Cancella_file)
		multiple_opz_file "$2" "d";break;;
		Copia_file)
		multiple_opz_file "$2" "c";break;;
		Sposta_file)
		multiple_opz_file "$2" "m";break;;
		Permessi_file)permessi_file "$2";break;;
		Cambio_Proprietario)
		multiple_opz_file "$2" "p";break;;		
		Visualizza_in_pannello)
			zenity --text-info --width 630 --title="Visualizza $1" --filename="$2" ;break;;
		Apri_file)clear;`$editor $2` 2> /dev/null;break;;
		Lancia_file)
			if [ "$3" = "h" ];then
				x-www-browser "$2" 2> /dev/null
				break
			else
				clear
				bash "$2"
				break
			fi
		;;
		*)break
	esac
done
return 
}

function select_file (){
while true; do
	if path_fileread=$( zenity --title "Seleziona il file su cui operare" --file-selection --separator=$);then
		fileread=$(basename $path_fileread)
		i=$(ls -F $path_fileread)
		l_string=${#i}
		# tiene conto che la posizione dei caratteri nella stringa parte da 0
		l_string=`expr $l_string - 1`
		ultimo_car=${i:l_string:1}
		estensione=${fileread##*.}
		if [ "$estensione" = "html" -o "$estensione" = "htm" ];then
			ultimo_car="h"
		fi
		select_opz_file "$fileread" "$path_fileread" "$ultimo_car"
	else
		break
	fi
done
}
my_help
select_file