Envoyé par
krislec
Le problème que j'avais également c'est qu'en passant pas automator-> exécution script shell-> .app, le lancement de l'application lance en fait 2 terminal ! Un premier vide puis le deuxième où l'on voit s'exécuter le script.
Nénamoins, cela ne résolut pas le problème quant à l'apparition d'une fenêtre (autre que le terminal) ou serait affiché les retours de commande du script, avec ensuite une barre de progression de "l'upload" des fichiers... Personellement, j'utilisais osascript que pour afficher le message final "n fichiers copiés"...
Je n'ai pas bien compris ce que tu veux.
Je regarde Xcode, mais j'avoue que c'est vraiment une usine à gaz !
C'est pas faux!
pour info le script en question :
Si tu as un script qui y ressemble je suis preneur...
Je n'ai pas de script qui y ressemble, mais, si tu veux bien, j'aurais quelques petites remarques.
Première petite remarque: pour la lisibilité, je n'aime pas beaucoup un petit "else" qui suit un grand "then".
De plus, j'aime bien, lorsque c'est possible, gérer d'abord le cas d'erreur et continuer par le cas normal.
Pour ces 2 raisons, je suis parfois amené à faire le test "négatif" et permuter le "then" et le "else".
Ensuite, il y a l'usage du "ls" dans un script...
si N_BaH tombe sur ce que tu as écrit, il va pas être content...
En fait, si j'ai bien compris N_BaH, le principal problème du "ls" dans un script concerne plutôt l'énumération dans une boucle "for" des fichiers retournés par "ls".
Heureusement, ce n'est pas ce que tu fais et tes boucles "for" sont fort bien écrites!
Mais, à tout prendre, et surtout si l'on comprend bien le principe du "if" et le sens des crochets (raccourci pour la commande "test"), il vaudrait mieux remplacer le test:
if [ "$(ls *.pdf 2>/dev/null)" ]; then
par:
if ls *.pdf >/dev/null 2>&1; then
car le statut retourné par "ls" indique s'il a trouvé ou non des fichiers correspondant aux arguments qui lui sont passés.
De plus, si l'on veut ajouter la gestion d'une barre de progression pour laquelle il est nécessaire de connaître l'objectif à atteindre, il faut calculer le nombre de fichiers, et, pour être général, on suppose que leur nom peut contenir des caractères gênants pour le décompte ou l'énumération comme espace ou return...
Voici une ébauche de proposition (non testée):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
| #!/bin/bash
# Definition des variables
USER="toto"
SERVER="tata"
DIR_ORIG="/Users/toto/scan"
TRASH="/Users/toto/.Trash/"
ID_USER="2"
CD_APP="/Applications/ACCES/DEVELOPER/cocoaDialog.app"
CD="$CD_APP/Contents/MacOS/CocoaDialog"
## Fonctions auxiliaires de mise en forme
# ,----[ tty colors ]
# | 0 1 2 3 4 5 6 7
# | black red green yellow blue magenta cyan grey
# `----
# [jack] 151230 cf. `man terminfo'
# - setaf (set ANSI foreground) and setab (set ANSI background)
# - smso and rmso (enter and exit standout mode (highlight))
# - smul and rmul (begin and end underlining)
#
# Other capabilities to enter various highlighting modes include:
# - blink (blinking)
# - bold (bold or extra bright)
# - dim (dim or half-bright)
# - invis (blanking or invisible text)
# - prot (protected)
# - rev (reverse video)
# - sgr0 (turn off all attribute modes)
# - smacs (enter alternate character set mode)
# - rmacs (exit alternate character set mode).
#
# Turning on any of these modes singly may or may not turn off other modes.
KR_COL_TEXT=7 # grey
KR_COL_OK=2 # green
KR_COL_NOK=1 # red
kr_text() { tput rev; tput setaf ${KR_COL_TEXT}; }
kr_ok() { tput setaf ${KR_COL_OK}; }
kr_nok() { tput blink; tput setaf ${KR_COL_NOK}; }
kr_end() { tput sgr0; }
# Usage: kr_echo [-n] [-e] "Texte" ["result"]
# -n : pas de retour à la ligne
# -e : "result" est affiché comme une erreur
kr_echo() {
n_opt=""
ok="$(kr_ok)"
case "$1" in
"-n") n_opt=$1 ; shift ;;
esac
case "$1" in
"-e") ok="$(kr_nok)" ; shift ;;
esac
echo -e $n_opt "$(kr_text)$1${ok}$2$(kr_end)"
}
## Programme principal
# Déplacement dans le dossier des courriers scannés (*.jpg ou *.pdf)
kr_echo -n "Déplacement au dossier ..... "
cd $DIR_ORIG && kr_echo "" "OK" || { kr_echo -e "" "Echec"; exit 1; }
# 1. Traitement des fichiers pdf
# Test de l'existence des fichiers pdf
if ! ls *.pdf >/dev/null 2>&1; then
kr_echo "Pas de fichier pdf à convertir"
else
# Récupération des fichiers pdf
# La liste des fichiers (dans un tableau)
pdf_files=( *.pdf )
# Le nombre de fichiers pdf
nb_pdf=${#pdf_files[@]}
# Traitement des fichiers Pdf2jpg
kr_echo "Traitement des ${nb_pdf} fichiers pdf avant envoi :"
/Users/krislec/Shell_scripts/pdf2jpg.sh
fi
# 2. Traitement des fichiers jpg
# On vérifie s'il y a des fichiers *.jpg à traiter
if ! ls *.jpg >/dev/null 2>&1; then
kr_echo "Pas de fichier jpg à convertir"
exit 0
fi
# Récupération des fichiers jpg
# La liste des fichiers (dans un tableau)
jpg_files=( *.jpg )
# Le nombre de fichiers jpg
nb_jpg=${#jpg_files[@]}
# Optimisation des fichiers jpg (nécessite d'avoir installé ImageOptim)
kr_echo -n "Optimisation des ${nb_jpg} fichiers images ..... "
/Applications/ImageOptim.app/Contents/MacOS/ImageOptim *.jpg > /dev/null 2>&1
kr_echo "" "OK"
# Test de la connexion SSH
kr_echo -n "Connexion SSH sur $SERVER ....."
ssh -q -p 2210 -o ConnectTimeout=5 $USER@$SERVER echo > /dev/null
if [ $? == "255" ]; then
kr_echo -e "Echec !"
exit 0
else
kr_echo "OK"
fi
# Transfert des fichiers *jpg vers le dossier du user
nb_file=0
all_res=0
for file in "${jpg_files[@]}"; do
echo "$((nb_file * 100 / nb_jpg)) $((nb_file * 100 / nb_jpg))% copie de ${file}..." # pour CocoaDialog
out=$(scp -P 2210 $file toto@tata:/path/to/users/$ID_USER/scan/ 2>&1)
res=$?
if test $res -eq 0; then
kr_echo "${out}"
else
kr_echo -e "${out}" "res = $res"
all_res=$res
fi 1>&2 # pour le Terminal
((nb_file++))
done > >($CD progressbar --title "Transfert")
# Test du succèx global
if test ${all_res} -ne 0 ; then
# Echec du transfert
kr_echo -e "Transfert des courriers ..... " "Echec."
else
# Le transfert ayant réussi, on supprime les fichiers *.jpg en local to trash.
kr_echo "Transfert des courriers ..... " "OK"
# Nombres de fichiers envoyés
kr_echo "*** ${nb_jpg} Courrier(s) transféré(s) ***"
# osascript -e 'display dialog "$FILECOUNT Courrier(s) transféré(s)."'
# Suppression des pages
mv "${jpg_files[@]}" "${TRASH}/"
fi |
Bonne lecture!
Partager