Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 09/07/2008, à 23:05

Totor

[bash] - mycp : copie avec progression

Bonsoir,

Lassé d'effectuer des copies de fichiers en shell sans en connaître la progression, j'ai écris un petit script sans prétention qui permet de fournir cette information.
Il s'agit d'une copie basique. Nombre d'évolutions pour l'adapter à la syntaxe et l'utilisation de la commande cp pourront être ajoutées. La qualité du code est très certainement discutable : je suis preneur des remarques.

Je poste le script car je pense qu'il peut intéresser du monde.
Je le ferai évoluer pour qu'il soit pleinement compatible avec la commande cp. Les nouvelles versions seront postées ci-dessous :

#!/bin/bash
trap "finScript" SIGINT SIGTERM
mycpVersion=1.4
#*************************************************************************************************************************
# Nom : mycp													 *
# Objet : copie de fichiers avec progression										 *
#*************************************************************************************************************************
# Version	Date		Objet											 *
#	1.0	09/07/2008	Création										 *
#	1.1	10/07/2008	-Gestion des signaux d'arrêt								 *
#				-Affichage de la destination								 *
#	1.2	11/07/2008	-Ajout d'informations temporelles							 *
#				-globalisation des variables nbCols et terminal pour diminuer les actions		 *
#	1.3	12/07/2008	-Gestion de dossier comme source 							 *
#				-Correction de la gestion de fin d'une copie						 *
#				-Affichae allégé									 *
#				-Correction bug dans l'affichae de la progession					 *
#	1.4	XX/XX/2008	-Compatibilité commande cp								 *
#*************************************************************************************************************************

#*************************************************************************************************************************
# variables globales													 *
#*************************************************************************************************************************
# indique si le traitement a été interrompu par un CTRL+C ou autre
export batchInterrompu=0
# n° du PID de la copie en cours
export numPID=0
# Nombre de colonnes du terminal
export nbCols=0
# récupération du terminal
export terminal=`tty`

# liste des options acceptées par la commande cp
export listeOptsLettre="abdfiHlLPpcRrsS:t:TuxvZ:"
export listeOptsMots="archive;backup;copy-contents;force;interactive;link;dereference;no-dereference;preserve;no-preserve;parents;recursive;remove-destination;sparse;strip-trailing-slashes;symbolic-link;suffix;target-directory;no-target-directory;update;one-file-system;context;help;version"
# liste des options
export listeOptions=""
# liste des fichiers/dossiers sources
export listeFichiers=""

export opti=0 # mode interactif
export optH=0 # suivre les liens symbolique
export optL=0 # toujours suivre les liens symboliques
export optparents=0 # accoler le chemin source au répertoire
export optR=0 # copie récursive
export optremoveDestination=0 # enlever le fichier cible avant ouverture
export optslash=0
export opts=0 # creer des liens symboliques
export optt=0 # copier toutes les sources dans le dossier fourni
export optT=0 # considérer la cible comme fichier normal
export optv=0 # mode verbeux
export optversion=0 # option version
export opthelp=0 # option help


#*************************************************************************************************************************
# Nom : finScript													 *
# Objet : Construit une chaine de n caractères										 *
#*************************************************************************************************************************
# Version	Date		Objet											 *
#	1.0	10/07/2008	Création										 *
#*************************************************************************************************************************
# paramètres :														 *
#*************************************************************************************************************************
function finScript
{
	# on indique que le batch a été interrompue
	batchInterrompu=1

	# kill de la copie en cours si il y en a une
	[[ ${numPID} -ne 0 && `ps --pid ${numPID}|wc -l` -ne 1 ]] && kill -9 ${numPID}
	echo "Copie(s) interrompue(s).">${terminal}
	exit 2
}

#*************************************************************************************************************************
# Nom : defTailleChaine													 *
# Objet : Construit une chaine de n caractères										 *
#*************************************************************************************************************************
# Version	Date		Objet											 *
#	1.0	09/07/2008	Création										 *
#*************************************************************************************************************************
# paramètres :														 *
#	$1 : chaine initiale												 *
#	$2 : taille maximale												 *
#	$3 : caractère ou texte complétant la chaine									 *
#*************************************************************************************************************************
function defTailleChaine
{
	chaine="$1"
	taille=$2
	caractere="$3"

	[ "${caractere}" == "" ] && caractere=" ";	
	while [ ${#chaine} -lt ${taille} ]
	do
		chaine="${chaine}${caractere}"
	done
	chaine="${chaine:0:${taille}}"
	echo "${chaine}"
}

#*************************************************************************************************************************
# Nom : calculDuree													 *
# Objet : calcul la durée écoulée entre 2 heures (unité=secondes)							 *
#*************************************************************************************************************************
# Version	Date		Objet											 *
#	1.0	11/07/2008	Création										 *
#*************************************************************************************************************************
# paramètres :														 *
#	$1 : Heure de début												 *
#	$2 : Heure de fin												 *
#*************************************************************************************************************************
function calculDuree
{
	debut=$1
	fin=$2
	secDebut=`echo ${debut}|awk -F":" '{print $1*3600+$2*60+$3 }'`
	secFin=`echo ${fin}|awk -F":" '{print $1*3600+$2*60+$3 }'`
	let duree=${secFin}-${secDebut}
	echo ${duree}
}

#*************************************************************************************************************************
# Nom : formatDuree													 *
# Objet : Formate une durée en seconde : format de sortie = <HH>h <MM>m <SS>s						 *
#*************************************************************************************************************************
# Version	Date		Objet											 *
#	1.0	11/07/2008	Création										 *
#*************************************************************************************************************************
# paramètres :														 *
#	$1 : durée													 *
#*************************************************************************************************************************
function formatDuree
{
	duree=$1
	echo `date +"%Hh %Mm %Ss" --date "${duree} secs 00:00:00"`
}

#*************************************************************************************************************************
# Nom : ajouteDuree													 *
# Objet : Ajoute une durée de n seconde à une heure									 *
#*************************************************************************************************************************
# Version	Date		Objet											 *
#	1.0	11/07/2008	Création										 *
#*************************************************************************************************************************
# paramètres :														 *
#	$1 : heure de début												 *
#	$2 : durée													 *
#*************************************************************************************************************************
function ajouteDuree
{
	debut=$1
	duree=$2
	echo `date +%H:%M:%S --date "${duree} secs ${debut}"`
}


#*************************************************************************************************************************
# Nom : afficheEvolution												 *
# Objet : Affiche le % de la copie											 *
#*************************************************************************************************************************
# Version    Date        Objet												 *
#    1.0    09/07/2008    Créion											 *
#    1.1    10/07/2008    Ajout de la destination									 *
#    1.2    11/07/2008	  Affichage des informations temporelles							 *
#    1.3    12/07/2008	  Correction bug calcul (lorsque la taille cible=0						 *
#			  Moins d'infos affichées									 *
#*************************************************************************************************************************
# paramèes :														 *
#    $1 : nom fichier													 *
#    $2 : taille copiee													 *
#    $3 : taille totale													 *
#    $4 : destination													 *
#    $5 : heure de début de la copie											 *
#*************************************************************************************************************************
function afficheEvolution
{
    fichier="$1"
    tailleCopiee=$2
    tailleTotale=$3
    destination="$4"
    heureDebut=$5

    # calcul du pourcentage :
    [ ${tailleCopiee} -lt 0 ] &&  tailleCopiee=0
    pourcentage=0
    [ ${tailleTotale} -ne 0 ] && let pourcentage=${tailleCopiee}*100/${tailleTotale}

    #calcul des informations temporelles
    if [[ ${tailleTotale} -eq 0 || ${pourcentage} -eq 0 ]]; then
	heureFin="??h ??m ??s"
    	dureeEcouleeFormatee=${heureFin}
	dureeRestanteFormatee=${heureFin}
    	dureeTotaleFormatee=${heureFin}
    else
	
    	heure=`date +%H:%M:%S`
    	dureeEcoulee=`calculDuree ${heureDebut} ${heure}`
    	let dureeTotale=${dureeEcoulee}*100/${pourcentage}
	let dureeRestante=${dureeTotale}-${dureeEcoulee}
    	heureFin=`ajouteDuree ${heureDebut} ${dureeTotale}`
    	dureeEcouleeFormatee=`formatDuree ${dureeEcoulee}`
	dureeRestanteFormatee=`formatDuree ${dureeRestante}`
    	dureeTotaleFormatee=`formatDuree ${dureeTotale}`
    fi

    # formatage du texte
    texte="${fichier} : ${pourcentage} % | Début : ${heureDebut} | [écoulée]-[restante]-[totale] : [${dureeEcouleeFormatee}]-[${dureeRestanteFormatee}]-[${dureeTotaleFormatee}] | Fin : ${heureFin}"
    texte=`defTailleChaine "${texte}" ${nbCols}`

    echo -ne "\r${texte}" >${terminal}
}

#*************************************************************************************************************************
# Nom : afficheFin													 *
# Objet : Affiche la fin de la copie d'un fichier									 *
#*************************************************************************************************************************
# Version	Date		Objet											 *
#	1.0	09/07/2008	Création										 *
#	1.1	10/07/2008	Ajout de la destination									 *
#	1.2	10/07/2008	Ajout d'informations temporelles							 *
#*************************************************************************************************************************
# paramètres :														 *
#	$1 : nom fichier												 *
#	$2 : taille copiee												 *
#	$3 : taille totale												 *
#	$4 : destination												 *
#	$5 : heure de début												 *
#*************************************************************************************************************************
function afficheFin
{
	fichier="$1"
	tailleCopiee=$2
	tailleTotale=$3
	destination="$4"
	heureDebut=$5

	# calcul des informations temporelles
	heureFin=`date +%H:%M:%S`
	dureeCopie=`calculDuree ${heureDebut} ${heureFin}`
	dureeCopie=`formatDuree ${dureeCopie}`

	fin="ok"
	[ ${tailleTotale} -ne ${tailleCopiee} ] && fin="ko"

	texte="${fichier} : ${fin} | Début : ${heureDebut} | Fin : ${heureFin} | Durée : ${dureeCopie}"
	texte=`defTailleChaine "${texte}" ${nbCols}`
	
	echo -e "\r${texte}" >${terminal}
}


#*************************************************************************************************************************
# Nom : taille														 *
# Objet : calcul la taille d'un fichier											 *
#*************************************************************************************************************************
# Version	Date		Objet											 *
#	1.0	09/07/2008	Création										 *
#*************************************************************************************************************************
# paramètres :														 *
#	$1 : nom fichier												 *
#*************************************************************************************************************************
function taille
{
	fichier="$1"
	tailleFichier=-1
	[ -a "${fichier}" ] && tailleFichier=`du "${fichier}"|cut -f1`

	echo ${tailleFichier}
}


#*************************************************************************************************************************
# Nom : copier														 *
# Objet : lance la copie d'un fichier											 *
#*************************************************************************************************************************
# Version	Date		Objet											 *
#	1.0	09/07/2008	Création										 *
#	1.1	10/07/2008	Adaptation pour gestion des signaux d'arrêt						 *
#       1.2     11/07/2008	Gestion de l'heure de début de la copie							 *
#       1.3     12/07/2008	Amélioration du processus de fin de la copie						 *
#	1.4	14/07/2008	Prise en compte des arguments de la commande cp						 *
#*************************************************************************************************************************
# paramètres :														 *
#	$1 : nom fichier source												 *
#	$2 : destination												 *
#*************************************************************************************************************************
function copier
{
	source="$1"
	destination="$2"

	fichier_sortie="${HOME}/$$.out"
	fichier_erreur="${HOME}/$$.err"

	[[ ! -a ${source} ]] && return

	[[ -a "${fichier_sortie}" ]] && rm -f "${fichier_sortie}"
	[[ -a "${fichier_erreur}" ]] && rm -f "${fichier_erreur}"
	touch ${fichier_sortie} ${fichier_erreur}

	# récupération de la taille source
	tailleSource=`taille "${source}"`
	
	# Si la destination est un dossier alors construction du nom du fichier destiation.
	# Pour cela, on supprime le / à la fin du nom de dossier (si présent) que l'on concatène avec le nom du fichier source
	[[ -d "${destination}" ]] && destination="`echo "${destination}"|sed "s/\(.*\)\/$/\1/"`/`basename "${source}"`"

	## suppression du ficher s'il existe
	#[ -a ${destination} ] && echo "" > "${destination}"

	# récupération de l'heure de début
	heureDebut="`date +%H:%M:%S`"

	# on lance la copie en arrière plan	
	cp "${source}" "${destination}" 2>"${fichier_erreur}" 1>"${fichier_sortie}" &
	numPID=$!

	afficheEvolution "${source}" 0 ${tailleSource} "${destination}" ${heureDebut}

	# tant que le process existe, c'est que la copie est en cours...
	while [[ `ps --pid ${numPID}|wc -l` -ne 1 ]]
	do
		tailleDestination=`taille "${destination}"`
		afficheEvolution "${source}" ${tailleDestination} ${tailleSource} "${destination}" ${heureDebut}		
	done	
	numPID=0

	# on affiche l'état finale de la copie
	tailleDestination=`taille "${destination}"`
	afficheFin "${source}" ${tailleDestination} ${tailleSource} "${destination}" ${heureDebut}
	[[ -s "${fichier_sortie}" ]] && ( echo "Sortie cp : " && cat "${fichier_sortie}" )
	[[ -s "${fichier_erreur}" ]] && ( echo "Erreur cp : " && cat "${fichier_erreur}" )
}


#*************************************************************************************************************************
# Nom : verifierOptions												 *
# Objet : Verification des paramètres passé au script									 *
#*************************************************************************************************************************
# Version	Date		Objet											 *
#	1.0	07/08/2008	Création										 *
#*************************************************************************************************************************
# paramètres :														 *
#	$* : liste des paramétres du script après gestion des paramétres commencant pas --				 *
#*************************************************************************************************************************
function verifierOptions
{
	while getopts ":${listeOptsLettre}" option 
	do
		case ${option} 
		in
			"\?") erreur=1;;
			*) [ -z "${options}" ] && options="-";
			if [ -z ${OPTARG} ]; then
				options="${options}${option}"
				# suppression de la ligne de commande
				listeFichiers="`echo "${listeFichiers}"|sed "s/-[^ ]*${option}//"`"
			else
				options="${options} -${option}=${OPTARG}"
				# suppression de la ligne de commande
				listeFichiers="`echo "${listeFichiers}"|sed "s/-${option}[ ]\*${OPTARG}//"`"
			fi;;
		esac
		[ ${erreur} -ne 0 ] && break;
	done
	listeFichiers="`echo "${listeFichiers}"|sed 's/""//g;s/^[[:space:]]//g;s/[[:space:]]$//g'`"	
}

#*************************************************************************************************************************
# Nom : verifierParametres												 *
# Objet : Verification des paramètres passé au script									 *
#*************************************************************************************************************************
# Version	Date		Objet											 *
#	1.0	13/07/2008	Création										 *
#*************************************************************************************************************************
# paramètres :	ensemble des arguments (par propore mais pas trouvé autrement)						 *
#*************************************************************************************************************************
function verifierParametres
{
	lstOptionsMots="`echo ";${listeOptsMots}"|sed "s/;/;--/g"`;"
	
	# on reconstruit la ligne de commande pour la stocker et supprimer les options afin de concerver les SOURCES/CIBLE 
	listeFichiers="${ligneCmd}"
	
	params=""
	erreur=0
	for param; do
		option="`echo "${param}"|grep '\(--\)\{1\}.\+[=]*$'`"
		if [ -n "${option}" ]; then
			option="`echo "${param}"|sed 's/\(--[^=]*\)=.*$/\1/'`"
			# il s'agit d'un paramètre commencant par --
			if [ -n "`echo "${lstOptionsMots}"|grep -o ";${option};"`" ]; then
				# il se trouve dans la liste des options autorisés

				nomOption="${option:2}"
				if [ "${nomOption}" = "help" ] || [ "${nomOption}" = "version" ]; then
					eval "opt${nomOption}=1"
				else
					params="$params ${param}"
				fi

				# on supprime de cmd
				listeFichiers="`echo "${listeFichiers}"|sed "s/${param}//"`"
			else
				#paramétre non reconnu
				erreur=1
			fi
		fi
		[ ${erreur} -ne 0 ] && break;
	done

	
	
	listeFichiers="`echo "${listeFichiers}"|sed 's/""//g;s/^[[:space:]]//g;s/[[:space:]]$//g'`"
	if [ ${erreur} -eq 0 ]; then
		export options=""
		export erreur=0
		eval "verifierOptions ${listeFichiers}"
	fi
	
	listeOptions="${options} ${params}"

	return ${erreur}
}

#*************************************************************************************************************************
# Nom : afficherSyntaxe													 *
# Objet : Affichage de la syntaxe d'utilisation du script								 *
#*************************************************************************************************************************
# Version	Date		Objet											 *
#	1.0	13/07/2008	Création										 *
#*************************************************************************************************************************
# paramètres :														 *
#	$1 : Nom du script												 *
#*************************************************************************************************************************
function afficherSyntaxe
{
	cmd=`basename $1`
	message=$2
	if [ -n "${message}" ]; then
		echo -e "\t${cmd} (V. ${mycpVersion}) : ${message}\n\tcf. man cp" 
	else
		echo -e "\t${cmd} (V. ${mycpVersion}) : cf. man cp" 
	fi
	return
}


#*************************************************************************************************************************
# gestion des paramétres												 *
#*************************************************************************************************************************
#reconstruction de la ligne de commande :
export ligneCmd=""
for valeur; do
        ligneCmd="${ligneCmd} \"${valeur}\""
done

eval "verifierParametres ${ligneCmd}"
verif=$?

[ ${verif} -ne 0 ] && ( afficherSyntaxe $0 "Paramétres incorrectes."; exit 5 )

# cas particulier des options --help et --version
if [[ ${optversion} -eq 1 || ${opthelp} -eq 1 ]]; then
	if [ ${optversion} -eq ${opthelp} ] || [ "${listeOptions}" != " " ]; then
		# il y a d'autres paramètres, c'est une erreur
		afficherSyntaxe $0 "Paramétres incorrectes."
		exit 5
	else
		afficherSyntaxe $0
		exit 0
	fi;
fi


#*************************************************************************************************************************
# Début du traitement													 *
#*************************************************************************************************************************

listeFichiers=(`echo ${listeFichiers}|sed "s/\'//g"`)
nbParm=${#listeFichiers[*]}
numParm=0
let numParmCible=${nbParm}-1
let numParmFinSource=${nbParm}-2

cible="`echo ${listeFichiers[${numParmCible}]}|sed 's/^"\(.*\)"$/\1/'`"

while [[ ${numParm} -le ${numParmFinSource} && ${batchInterrompu} -eq 0 ]]
do
	source="`echo ${listeFichiers[$numParm]}|sed 's/^"\(.*\)"$/\1/'`"
	
	if [ -d "${source}" ]; then
		if [ ! -d "${cible}" ]; then
			# la source est un dossier mais pas la cible (cas où il n'y a que 2 paramètres et que la source est un dossier mais pas la cible)
			echo "Impossible de copier un dossier dans un fichier."
			exit 4
		else
			# la source est un dossier, on copie donc la totalité du dossier
			# construction du nom de dossier cible
			nomDossier="`basename "${source}"`"
			dossierCible="${cible}/${nomDossier}"
			source="`echo ${source}|sed "s/\/$//"`"

			# copie de tous les fichiers récursivement			
			for fichier in `find "${source}" -name "*" -a ! -type d`
			do
				nbCols=`stty -a|sed '/columns/!d;s/.*columns \([0-9]\{1,3\}\).*/\1/'`
				# on construit le nom de dossier cible pour le fichier à copier
				nomFichierSource="`basename "${fichier}"`"
				nomDossierSource="`dirname "${fichier}"`"
				repCible="`echo "${nomDossierSource}"|sed "s#^${source}#${dossierCible}#"`"

				# création du dossier cible s'il n'existe pas
				mkdir -p "${repCible}" 2>/dev/null 1>/dev/null

				# nom cible du fichier
				fichierCible="${repCible}/${nomFichierSource}"

				# on lance la copie
				(copier "${fichier}" "${fichierCible}")
				[ ${batchInterrompu} -ne 0 ] && break
			done
		fi
	else
		nbCols=`stty -a|sed '/columns/!d;s/.*columns \([0-9]\{1,3\}\).*/\1/'`		
		copier "${source}" "${cible}"
	fi
	let numParm=${numParm}+1
done

echo "Copie(s) terminée(s)."
exit 0

Note : la version actuelle du script considère les (n-1)ièmes premier paramètres comme des fichiers sources (les dossiers ne sont pas encore pris en compte) et le dernier comme fichier/dossier destination. Si il y a plusieurs fichiers sources et si le dernier paramètre est un fichier, alors ce fichier sera successivement la cible de tous les fichiers sources.

EDIT : depuis V.1.3, les dossiers comme source sont accéptés et la cible ne peut être un fichier si il y a plusieurs sources ou si la source est un dossier.

Dernière modification par Totor (Le 02/09/2008, à 18:40)


-- Lucid Lynx --

Hors ligne

#2 Le 10/07/2008, à 22:02

Totor

Re : [bash] - mycp : copie avec progression

V.1.1 :
- Fiabilisation du traitement avec gestion des signaux d'arrêt
- Affichage de la cible

Pour la prochaine version (si j'ai le temps avant jeudi prochain, début de mes congés) :
- gestion des paramétres reconnus par la commande cp
- ajout des informations : durée écoulée, durée restante estimée


-- Lucid Lynx --

Hors ligne

#3 Le 10/07/2008, à 22:42

nicolas66

Re : [bash] - mycp : copie avec progression

Et ca, c'est pas cool ?


"The computer was born to solve problems that did not exist before." (B. Gates)

Hors ligne

#4 Le 11/07/2008, à 09:14

Totor

Re : [bash] - mycp : copie avec progression

Je me doutais bien que j'aurais une réponse de ce type un jour où l'autre wink
Merci pour l'info.


-- Lucid Lynx --

Hors ligne

#5 Le 11/07/2008, à 19:06

nicolas66

Re : [bash] - mycp : copie avec progression

Désolé, je poste à chaud sans avoir testé ton script et sans savoir s'il possède quelques features inédites par rapport au lien que je t'ai donné hmm. Ca peut peut-être valoir le coup de jeter un coup d'oeil.

Juste pour info : il aurait existé une version de `cp', mais ca n'avait rien d'officiel.

Dernière modification par nicolas66 (Le 11/07/2008, à 22:55)


"The computer was born to solve problems that did not exist before." (B. Gates)

Hors ligne

#6 Le 11/07/2008, à 19:19

Totor

Re : [bash] - mycp : copie avec progression

V.1.2 :
-ajout des informations temporelles (formatage à revoir)
-globalisation de 2 variables pour limiter les actions

nicolas66 a écrit :

Désolé, je poste à chaud sans savoir testé ton script et sans savoir s'il possède quelques features inédites par rapport au lien que je t'ai donné hmm. Ca peut peut-être valoir le coup de jeter un coup d'oeil.

Juste pour info : il aurait existé une version de `cp', mais ca n'avait rien d'officiel.

t'inquiète : je ne l'ai vraiment pas mal pris tongue
J'avais connaissance de l'existance d'outils similaires mais j'avais envie de réinventer la roue wink
J'ai tout de même été jeté un oeil à ton lien. Cela m'a permis d'apprendre la commande strace. Mon script n'a rien à envier à celui que tu m'as montré.
Merci

Dernière modification par Totor (Le 11/07/2008, à 20:48)


-- Lucid Lynx --

Hors ligne

#7 Le 12/07/2008, à 00:32

reeth

Re : [bash] - mycp : copie avec progression

Cela a l'air intéressant quand on copie des fichiers lourds, merci smile

Hors ligne

#8 Le 12/07/2008, à 13:38

redisded

Re : [bash] - mycp : copie avec progression

Bonjour, petite question de curiosité :

Pourquoi avoir choisi ksh ? Est-ce tout simplement ton shell préféré ou avais-tu une raison précise?

J'ai souvent lu qu'il fallait choisir son shell en fonction du script à faire, mais je ne sais pas trop en fonction de quoi choisir, donc je fais tout en bash parce que c'est ce qui semble le plus utilisé mais bon...

Hors ligne

#9 Le 12/07/2008, à 13:52

Totor

Re : [bash] - mycp : copie avec progression

Tu veux la vérité ?
Benh j'en sais rien ! Ca ne fait que peut de temps que je bosse sous Linux et Solaris (8 mois). Les dév existants étaient réalisés en ksh... donc j'ai continué. Je sais simplement que ksh est une extension du bash.
lol

Dernière modification par Totor (Le 12/07/2008, à 14:40)


-- Lucid Lynx --

Hors ligne

#10 Le 12/07/2008, à 13:56

redisded

Re : [bash] - mycp : copie avec progression

oki, re-merci de ta réponse wink

Totor a écrit :

Ca ne fait que peut de temps que je bosse sous Linux et Solaris (8 mois).:lol:

Arff j'y suis depuis déja deux ans, et t'arrete pas de m'apprendre des trucs...

Hors ligne

#11 Le 12/07/2008, à 17:12

Totor

Re : [bash] - mycp : copie avec progression

V.1.3 :
Gestion de dossier comme source
Correction de la gestion de fin d'une copie
Affichage allégé
Correction bug dans l'affichae de la progession


Notes :
- si vous voyez un moyen d'améliorer les perfs, je suis preneur.
- est-il possible d'afficher du texte sur plusieurs lignes puis d'effacer ou remplacer ce texte dans sa totalité ? J'ai testé en essayant de modifier la variable LINENO mais ça ne semble fonctionne pas. De même j'ai tenté un \r\b pour supprimer le \n mais ça ne fonctionne pas non plus !


-- Lucid Lynx --

Hors ligne

#12 Le 14/08/2008, à 22:59

Totor

Re : [bash] - mycp : copie avec progression

Version 1.4a.
- la détection des paramétres est au point mais ils ne sont pas appliqués à la commande cp.
- passage de ksh à bash pour des problèmes que je ne me souviens plus roll (Il y a eu 15 jours de congés en Espagne depuis + 2 semaines de TAF entre les 2)

Sinon, je n'irai pas plus loin dans les développements pour les raisons suivantes :
- je me suis aperçu que certaines options ne sont pas très évidentes à "greffer" au script
- je n'ai plus le courage car le principal est fait : simple copie de fichiers / dossiers
- par manque de temps (travaux à la maison + enfants)

Pour ceux/celles qui souhaitent continuer, je répondrai aux interrogations.

Bon courage.

EDIT : le sujet a donc été modifié.

Dernière modification par Totor (Le 14/08/2008, à 23:02)


-- Lucid Lynx --

Hors ligne

#13 Le 15/08/2008, à 15:16

thy

Re : [bash] - mycp : copie avec progression

Totor a écrit :

Je sais simplement que ksh est une extension du bash.

[troll]
et que zsh et une extension d'a peu pret tout les shelll existants smile
[/troll]

Désolé j'ai pas résisté.

Hors ligne