#1551 Le 11/03/2012, à 11:06
- Postmortem
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Salut,
Avec les bonnes options dans read et -print0 dans find, on peut boucler sur les fichiers mais c'est quand même moins simple qu'une boucle for !
$ touch sans_espace "avec espace" "avec saut
de ligne" " avec pleins d'espaces " 'avec \t \n \" \'
$
$ while IFS= read -rd '' fic
do
echo "Fichier : '$fic'"
done < <(find -print0)
Fichier : '.'
Fichier : './avec \t \n \" \'
Fichier : './sans_espace'
Fichier : './ avec pleins d'espaces '
Fichier : './avec saut
de ligne'
Fichier : './avec espace'
$
$ # ou sans modifier l'IFS :
$
$ while read -rd ''
do
echo "Fichier : '$REPLY'"
done < <(find -print0)
Fichier : '.'
Fichier : './avec \t \n \" \'
Fichier : './sans_espace'
Fichier : './ avec pleins d'espaces '
Fichier : './avec saut
de ligne'
Fichier : './avec espace'
Dernière modification par Postmortem (Le 11/03/2012, à 11:08)
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#1552 Le 11/03/2012, à 12:12
- Bousky
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Pourquoi faire simple quand on peut faire compliqué ?
Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)
Hors ligne
#1553 Le 11/03/2012, à 12:19
- Postmortem
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
C'est sûr que pour boucler sur des noms de fichiers, c'est se compliquer la vie mais lorsque l'on veut rechercher des fichiers non modifiés depuis une certaine date ou boucler sur les fichiers d'une arbo en excluant certains répertoires ou toute autre chose que find permet dans ses options, ben c'est pratique de connaitre cette boucle.
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#1554 Le 11/03/2012, à 12:35
- Bousky
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
De toute façon, la plus part du temps on peut éviter de rediriger le résultat de find en utilisant -exec (éventuellement en définissant une fonction).
$ find -exec echo "Fichier : '{}'" ";"
Fichier : '.'
Fichier : './avec saut
de ligne'
Fichier : './avec \t \n \" \'
Fichier : './ avec pleins d'espaces '
Fichier : './sans_espace'
Fichier : './avec espace'
Dernière modification par Bousky (Le 11/03/2012, à 12:39)
Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)
Hors ligne
#1555 Le 11/03/2012, à 13:45
- Postmortem
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
De toute façon, la plus part du temps on peut éviter de rediriger le résultat de find en utilisant -exec (éventuellement en définissant une fonction).
J'étais entrain d'essayer avec une fonction derrière -exec mais ça ne passe pas.
J'obtiens :
$ find -exec mafonc "{}" \;
find: "mafonc": Aucun fichier ou dossier de ce type
find: "mafonc": Aucun fichier ou dossier de ce type
...
J'ai bien créé et exporté "mafonc"... T'es sûr que l'on peut utiliser une fonction dans ce cadre ?
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#1556 Le 11/03/2012, à 20:46
- Hizoka
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Bousky => tu as raison pour la boucle while et les sauts de lignes dans les noms de fichiers.
je ne retrouve plus certains topics ou la boucle for posait soucis et qu'il vallait mieux passer par while...
il y avait certaines conditions à respecter... ce qui n'est pas le cas ici.
Avec les bonnes options dans read et -print0 dans find, on peut boucler sur les fichiers mais c'est quand même moins simple qu'une boucle for !
pas besoin de tout ca...
un simple find . -iname "*.jpg" OU -type f te renvoie tous les fichiers.
si tu veux limiter les fichiers au dossier actuelle, ajoute -maxdepth 1
find n'est pas tres difficile et tres puissant.
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#1557 Le 11/03/2012, à 21:02
- Postmortem
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
@Hizoka
Je parlais du cas de find en entrée d'une boucle while. Avec -print0 et les options passées à read, ça gère tout même les noms avec saut de ligne.
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#1558 Le 11/03/2012, à 21:17
- Hizoka
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
ha ! ça je savais pas !
merci
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#1559 Le 12/03/2012, à 11:42
- rmy
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Heu... Intéressante conversation au sujet des boucles, mais il me semble simplement que aussi bien "convert" que "mogrify" permettent l'usage du type :
mogrify *.JPG
ce qui simplifie un peu le concept
En plus, pour le cas concret discuté, renommer/resizer les photos d'un CANON ça se fait aussi hyper plus efficacement avec Exiftool.
Enfin, pour ce qui est de renommer les .flac avec les parenthèses, c'est beau de réinventer le script, mais "pyrenamer" fait ça très bien
récupération de données: vrac–topic unique–mon site pro pour les particuliers : www.diskcard.fr– Je recycle volontiers tous vos disques durs HS (ou pas).
Le site pro pour les pros, spécialiste recupération de données RAID, NAS et serveurs: www.vodata.fr
Hors ligne
#1560 Le 12/03/2012, à 11:51
- Bousky
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Enfin, pour ce qui est de renommer les .flac avec les parenthèses, c'est beau de réinventer le script, mais "pyrenamer" fait ça très bien
Heu j'ai rien réinventé du tout, rename est une commande de base de tout système qui se respecte. Enfin si tu préfère installer un logiciel et toutes ces dépendances pour pour un truc qui se fait en une seule ligne de commande sans, c'est ton problème.
Et pour ce qui est des boucles, il y a des cas ou on ne peut pas y échapper.
Dernière modification par Bousky (Le 12/03/2012, à 11:53)
Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)
Hors ligne
#1561 Le 12/03/2012, à 12:20
- rmy
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
@Bousky : ne te fâche pas, le quiproquo tient au titre du post. Bien sûr que ta commande est celle qui est la plus efficace. Quant aux boucles, elles ne sont clairement pas utiles dans le contexte proposé. Même si la digression était fort intéressante.
récupération de données: vrac–topic unique–mon site pro pour les particuliers : www.diskcard.fr– Je recycle volontiers tous vos disques durs HS (ou pas).
Le site pro pour les pros, spécialiste recupération de données RAID, NAS et serveurs: www.vodata.fr
Hors ligne
#1562 Le 12/03/2012, à 19:23
- Postmortem
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Bonsoir à tous,
Heu... Intéressante conversation au sujet des boucles, mais il me semble simplement que aussi bien "convert" que "mogrify" permettent l'usage du type :
mogrify *.JPG
C'est vrai qu'on est un peu parti en boucle avec cette histoire de couilles... Euh non, c'est l'inverse ! (c'est un gros mot couilles ?!)
Mais d'un autre coté, je me disais que pour garder les mêmes noms de fichiers, il fallait une boucle... Mais en fait non !
Après relecture de la doc d'imagemagick (ici précisément), j'ai trouvé ceci :
convert '*.jpg' -set filename:nom_fic %f -resize 15% 'out/%[filename:nom_fic]'
Il ne faut pas oublier le nom de dossier dans le nom du fichier de sortie ( out/%[filename:nom_fic] ) sinon, on écrase les images d'origines !
Edit : rajout de simples quotes autour de *.jpg dans la commande. Ça permet d'éviter les problèmes de "taille de commande" quand il y a beaucoup de fichier ; c'est imagemagick lui meme qui va s'occuper de convertir *.jpg à la place du shell.
Dernière modification par Postmortem (Le 12/03/2012, à 20:09)
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#1563 Le 16/04/2012, à 07:52
- z3bra_
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Salut la communauté !
Bon alors voici un petit script que je me suis concocté (Certain existent déja mais je m'en suis rendu compte qu'après avoir terminé le mien )
C'est un petit script de gestion d'une liste de tâches, le tout couplé à un conky dédié, histoire de toujours savoir ce qu'il reste à faire d'un simple coup d'oeil sur le bureau !
Le script gère l'ajout des tâches (Étonnant !!), la suppression via le numéro de ligne ou un régex (commande 'sed'),
l'affichage de liste complète (avec numérotation de ligne), la suppression de toutes les tâches (Pour les jours de ras-le-bol ), ainsi que la
restauration de la dernière ligne effacée (Je me suis senti bête la première fois ^^)
todo.sh
#
# ~/.script/todo.sh
#
# Gestion d'une liste des tâches
#
usage() {
cat << HELPEOF
$(tput setaf 3)Gestion d'une liste des tâches simple$(tput sgr0)
$(tput bold)USAGE:$(tput sgr0)
todo [ -lh ] [ -r {digit|regex} ] [ task ]
$(tput bold)EXEMPLE:$(tput sgr0)
$ todo "Penser à utiliser des \\\\ ou des \" lorsque j'entre une tâche qui contient des apostrophes"
$ todo -r apostrophes
ou
$ todo -l
> 1 Penser à utiliset des \ ou des " lorsque j'entre une tâche qui contient des apostrophes
$ todo -r 1
$(tput bold)OPTIONS :$(tput sgr0)
-c : Nettoyer le fichier
-r {expr | numb} : Supprimer une tâche
-l : Lister les tâches
-b : Restauration depuis la dernière suppression
-h : Afficher cette aide
HELPEOF
}
# fonction de suppression d'un tâche
remove_task() {
# sauvegarde de la liste des tâches en cas d'erreur
cp ~/.todo ~/.todo.sav
# Si l'argument est de type numérique
[ $1 -eq 0 ] 2>/dev/null
if [ $? -eq 0 -o $? -eq 1 ]; then
LINE=`sed -n "$1p" ~/.todo`
# On supprime la ligne correspondante
sed -i "$1d" ~/.todo
echo -e "La ligne :"
echo -e "\t$(tput bold)$LINE$(tput sgr0)"
echo -e "a été retirée de la liste des choses à faire"
else
# sinon ...
LINES=`sed -n "/$1/p" ~/.todo | wc -l`
# On verifie que le 'regex' n'identifie bien qu'une seule ligne
if [[ $LINES == 1 ]]; then
LINE=`sed -n "/$1/p" ~/.todo`
sed -i "/$1/d" ~/.todo
echo -e "La ligne :"
echo -e "\t$(tput bold)$LINE$(tput sgr0)"
echo -e "a été retirée de la liste des choses à faire"
# si oui on la supprime
else
# sinon on l'envoie chier
echo "Plusieurs lignes contiennent ce regex"
echo "Soyez plus précis"
fi
fi
}
# Création du fichier d'enregistrement
# des tâches s'il n'existe pas
if [ ! -f ~/.todo ]; then
touch ~/.todo
fi
OPTIONS=0
# Dans le cas ou des options seraient passées au script ...
while getopts "r:cblh" OPT; do
# flag d'utilisation d'une option
OPTIONS=1
# on les éxécutes une par une
case $OPT in
r)
# suppression d'une tâche
# ($OPTARG peut être une expression ou un nombre...
remove_task $OPTARG
;;
c)
# Nettoyage du fichier complet
sed -i "/^$/d" ~/.todo
;;
b) # Restauration de la dernière sauvegarde
cat -n ~/.todo.sav
read -s -n1 -p "Restaurer cette liste ? (Y/n)" CHOICE
if [[ "$CHOICE" == "y" || -z "$CHOICE" ]]; then
cp -f ~/.todo.sav ~/.todo
fi
echo
;;
l)
# Liste des tâches
cat -n ~/.todo
;;
h)
# Aide
usage
exit 1
;;
*)
# Options non existantes
echo "$(tput bold)$(tput setaf 1)L'option $(tput setaf 1)$OPTARG$(tput setaf 7) n'existe pas !$(tput sgr0)"
usage
exit 0
;;
# argument d'une options oublié
:)
echo "$(tput bold)$(tput setaf 1)L'option $(tput setaf 1)$OPTARG$(tput setaf 7) necessite un argument !$(tput sgr0)"
usage
exit 0
;;
esac
done
shift $((OPTIND-1))
# Si aucune option n'est spécifiée
if [ "$OPTIONS" == 0 ];then
if [ "$#" != "0" ]; then
# on ajoutes TOUS ce que suit l'appel du script au fichier de tâche
echo $@ >> ~/.todo
else
read -p "> " TASK
echo "$TASK" >> ~/.todo
fi
fi
.conkyrc :
#####################
# - Conky settings - #
######################
background yes
update_interval 1
total_run_times 0
net_avg_samples 1
cpu_avg_samples 1
imlib_cache_size 0
double_buffer yes
no_buffers yes
#####################
# - Text settings - #
#####################
use_xft yes
xftfont tlwgtypewriter:size=9
text_buffer_size 2048
#############################
# - Window specifications - #
#############################
own_window_class Conky
own_window yes
own_window_type override
own_window_transparent yes
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
#own_window_argb_visual yes
#own_window_argb_value 100
alignment tl
gap_x 96
gap_y 32
minimum_size 250 100
default_bar_size 60 8
#########################
# - Graphics settings - #
#########################
draw_shades no
default_color efefef
default_shade_color 1d1d1d
color0 ffffff
color1 1d1d1d
color2 ff8424
TEXT
${font Purisa:size=16}${color2}Things to do : ${hr 2}
${font Purisa:size=10}${color2}${voffset -28}
${execi 3600 date +"%A %e %B %Y"}
${color0}${font}
${exec cat ~/.script/todo.sh -l}
Le tout est fait pour fonctionner avec le script présent dans un dossier "~/.script/todo.sh", ce qui bien sur est modifiable à la convenance de tout un chacun en modifiant simplement la dernière ligne du .conkyrc
En espérant servir à quelqu'un, même si l'originalité du script n'est pas des plus exceptionnelles ^^
✿ Plant a tree ✿ ---- ☹ Eat a gnome ☹
Hobbes: Shouldn't we read the instructions?
Calvin: Do I look like a sissy ?
Hors ligne
#1564 Le 19/04/2012, à 16:36
- 444_bruno
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Salut
Voici un petit scripts réalisé avec mon frangin pour faire une vidéo HD à partir d'une suite d'images et la possibilité de zoomer ou de se déplacer dans les images.
Le script vous demande de rentré le cadrage de début et le cadrage de fin (décalage l(1) h(2) et largeur (3) en pixel, la hauteur et calculé pour faire du 16/9)
_ il calcul la dimension de chaque image et les redimensionnent en 1080/1920 dans un sous dossier reslut.
_ il crée la vidéo dans le sous dossier film avec mencoder
#!/bin/bash
nombre_de_fichier=$(ls *.JPG | wc -l)
nombre_de_resolution=$(for i in *.JPG; do identify $i | awk '{ print $3 }'; done | sort -u | uniq | wc -l)
if [ "1" = $nombre_de_resolution ]
then
echo "resolution unique, c'est gggooooooooddd!!"
else
echo "attention il y a plusieurs resolution de fichier (ou pas de fichier .JPG) !!!"
echo "nombre de resolution : $nombre_de_resolution, resolutions:"
for i in *.JPG; do identify $i | awk '{ print $3 }'; done | sort -u | uniq
echo
for i in *.JPG; do echo $i; identify $i | awk '{ print $3 }'; done
exit
fi
resolution=$(for i in *.JPG; do identify $i | awk '{ print $3 }'; done | sort -u | uniq)
resolution_l=$(echo "$resolution" | awk -Fx '{print $1}')
resolution_h=$(echo "$resolution" | awk -Fx '{print $2}')
mkdir result
mkdir film
echo "la resolution des fichiers est: $resolution_l x $resolution_h"
echo "nombre_de_fichier: $nombre_de_fichier"
echo "poin de depart du time laps: decalage l, decalage h, largeur de l'image"
read largeurp hauteurp largeurip
#largeurp=20;hauteurp=16;largeurip=10
echo "point de fin du time laps: decalage l, decalage h, largeur de l'image"
read largeurf hauteurf largeurif
#largeurf=0;hauteurf=402;largeurif=800
echo "$hauteurp $largeurp $largeurip $hauteurf $largeurf $largeurif"
###verification des limite de la photo###
##en largeur ###
let "largeur_maxp=largeurp+largeurip"
let "largeur_maxf=largeurf+largeurif"
## en hauteur ##
let "hauteur_maxp=hauteurp+largeurip*9/16"
let "hauteur_maxf=hauteurf+largeurif*9/16"
if [ $largeur_maxp -gt $resolution_l ] || [ $largeur_maxf -gt $resolution_l ]
then
echo "Atention !! la taille du cadrage sort de la photo en largeur"
read -p "veux tu continuer y ou n : " rep
if [ $rep = "n" ] || [ $rep = "N" ]
then
exit
fi
fi
if [ $hauteur_maxp -gt $resolution_h ] || [ $hauteur_maxf -gt $resolution_h ]
then
echo "Atention !! la taille du cadrage sort de la photo en hauteur"
read -p "veux tu continuer y ou n : " rep
if [ $rep = "n" ] || [ $rep = "N" ]
then
exit
fi
fi
j="1"
for i in *.JPG; do
### calcul de largeur ###
l=$(echo "($largeurif-$largeurip)*($j-1)/($nombre_de_fichier-1)+$largeurip" | bc)
### calcul de hauteur ###
h=$(echo "($l*9)/16+1" | bc)
### calcul du décalage hauteur ###
hc=$(echo "($hauteurf-$hauteurp)*($j-1)/($nombre_de_fichier-1)+$hauteurp" | bc)
### calcul du décalage largeur ###
lc=$(echo "($largeurf-$largeurp)*($j-1)/($nombre_de_fichier-1)+$largeurp" | bc)
echo "$l $h $j"
convert -crop $l"x"$h+$lc+$hc -resize 1920 $i result/$i;
mogrify -crop 1920x1080+0+0 result/$i
result_size=$(identify result/$i | awk '{ print $3 }')
echo "$i : $l X $h + $lc + $hc $result_size" ;
let "j=j+1"
done
cd result
mencoder mf://*.JPG -ovc lavc -lavcopts vcodec=mjpeg -o ../film/timelapse-25fps.avi
cd -
rm -r result #suppression des images intermédiaire
Il faut que les images soit en .JPG et non .jpg
Il utilise Mencoder pour la video et Imagemagick pour redimensionner les images.
J'utilise gimp pour connaître les dimetions du cadre
si ça peut servir ..
Hors ligne
#1565 Le 19/04/2012, à 18:49
- z3bra_
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Bonjour tout le monde !
Voici un petit script que j'ai créé il y a peu de temps et qui me rend énormément de service !
C'est un script permettant de lancer des applications (y compris en mode console : irssi, ncmpcpp, mutt, etc...) UNIQUEMENT si elle ne tournent pas déjà !
Ça peut paraître bête comme ça, mais après m'être connecté par exemple à IRC via irssi sous 3 pseudo à la fois à cause de sessions screen détachées, je me suis dit qu'il était temps de réagir o/
Par exemple :
openIfNotExist.sh irssi -ns
(mon bind préféré !) permet de lancer irssi dans un nouveau terminal, au sein d'une session screen.
Si une session screen nommée "irssi" existe déjà mais est détachée, celle-ci sera ré attachée dans le nouveau terminal ouvert, sinon, la session (nommée irssi) sera créée.
Je me suis efforcé de détailler le script afin qu'il soit facilement compréhensible et améliorable ! Donc si vous l'utilisez et que vous l'améliorez (ce qui ne devrait pas être compliqué...), n'hésitez pas à me renvoyer vos versions, ça m'intéresse (par exemple, je n'arrive pas à utiliser le script en passant l'application en lancer en dernier argument).
Sans plus attendre, le voici ! En espérant qu'il serve à quelqu'un !
#
# ~/scripts/openIfNotExist.sh [application]
#
# Script permettant d'ouvrir une application
# uniquement si elle n'est pas déja ouverte
#
# Fonction d'affichage de l'usage du script
# /!\
# L'application doit être appellée AVANT
# les arguments
# /!\
usage(){
echo "$0 application [options]"
echo "OPTIONS :"
echo " -n : Ouvrir dans un nouveau terminal"
echo " -f : Forcer la fermeture"
echo " -s : Lancement dans une session screen"
echo " -h : Afficher cette aide"
}
# Personnalisation
# Terminal à utiliser
TERMINAL="urxvtc"
# Option de nommage de la fenêtre de terminal
TERMNAME="-name"
# Option permettant de passer une commande à l'ouverture du terminal
TERMCMD="-e"
# L'application doit être le premier argument passé au script
APPLI=$1
# Si appel sans argument
if [ -z "$APPLI" ]; then
# On quitte le script
usage
exit 1
else
# Sinon on teste si l'application tourne
RUNNING=`ps -e | grep -o $APPLI`
fi
TARGET=''
SCREEN=''
shift
while getopts "nfsh" OPT; do
case $OPT in
n)
# Lancement dans un nouveau terminal ayant pour nom, le nom de l'application
# J'utilise le client urxvtc, modifiez le terminal et l'option de lancement (-e)
# en fonction de vos besoins dans les initialisation du script
# (ex: TERMINAL="xterm"; TERMNAME="-name"; TERMCMD="-e"
TARGET="$TERMINAL $TERMNAME $APPLI $TERMCMD"
;;
f)
# Relancement forcé de l'application
if [ -n "$RUNNIG" ]; then
pkill $RUNNING
RUNNING=''
fi
;;
s)
# Lancement de l'application dans GNU/screen
# On teste si parmis les session screen DÉTACHÉES, il en existe une ayant
# le nom de l'application à lancer.
DETACH=`screen -list | sed '/Attached/d' | grep -o $APPLI`
if [ -z "$DETACH" ]; then
# S'il n'y en a pas, on paramètre le lancement de l'application dans une
# session screen ayant pour nom l'application à lancer
SCREEN="screen -S $APPLI -t $APPLI"
else
# Sinon, on réattache la session screen associée
SCREEN="screen -r"
RUNNING=''
fi
;;
h)
# Aide
usage
;;
*)
# Options invalide
echo "L'option $OPTARG n'est pas valide"
usage
;;
esac
done
# Si l'application ne tourne pas...
if [ -z "$RUNNING" ]; then
# On la lance avec les paramètres demandés
$TARGET $SCREEN $APPLI
else
# Sinon on prévient l'utilisateur que l'appli tourne déja
echo "$RUNNING is allready running"
echo "Use [-f] to force reopen, or kill app manually"
fi
✿ Plant a tree ✿ ---- ☹ Eat a gnome ☹
Hobbes: Shouldn't we read the instructions?
Calvin: Do I look like a sissy ?
Hors ligne
#1566 Le 20/04/2012, à 04:56
- pingouinux
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Bonjour z3bra_,
(par exemple, je n'arrive pas à utiliser le script en passant l'application en lancer en dernier argument)
Remplacer ceci :
# L'application doit être le premier argument passé au script
APPLI=$1
par cela :
# L'application doit être le dernier argument passé au script
n=$# # Nombre d'arguments
APPLI="${@:$n}" # Le dernier argument
et supprimer le shift devant while getopts
Autre méthode possible, mais pas ici (car $APPLI est utilisé lors de la lecture des autres arguments dans la boucle while getopts)
# shift
while getopts "nfsh" OPT; do
case $OPT in
........................................
esac
done
shift $((OPTIND-1))
APPLI="$1"
# Remarque
# Les 2 lignes précédentes peuvent être remplacées par :
# APPLI="${@:$OPTIND:1}"
Extrait de man bash
OPTIND The index of the next argument to be processed by the getopts
builtin command (see SHELL BUILTIN COMMANDS below).
Dernière modification par pingouinux (Le 20/04/2012, à 06:35)
Hors ligne
#1567 Le 20/04/2012, à 17:26
- z3bra_
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Merci pingouinux pour l'astuce, j'avais essayé de me débrouiller avec l'OPTIND, mais je ne m'en était pas sorti ^^
en revanche je ne connaissais pas la notation ${@:$n} !
en tout cas merci pour ton aide dans mon pélerinux
✿ Plant a tree ✿ ---- ☹ Eat a gnome ☹
Hobbes: Shouldn't we read the instructions?
Calvin: Do I look like a sissy ?
Hors ligne
#1568 Le 07/05/2012, à 08:58
- Neko62
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Bonjour à tous,
quand j'execute le code en python suivant :
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Un app-indicator très simple qui ouvre des post-it placés dans un dossier
# créé par Pseudomino à partir de indicator-places le 18/12/2011
#
import os
import gtk
import gio
import signal
import subprocess
import appindicator
import urllib
APP_NAME = 'indicator-post-it'
APP_VERSION = '0.1'
class IndicatorPostit:
def __init__(self):
self.ind = appindicator.Indicator("post-it", "tomboy", appindicator.CATEGORY_APPLICATION_STATUS)
self.ind.set_status(appindicator.STATUS_ACTIVE)
self.update_menu()
def create_menu_item(self, label, icon_name):
image = gtk.Image()
image.set_from_icon_name(icon_name, 24)
item = gtk.ImageMenuItem()
item.set_label(label)
item.set_image(image)
item.set_always_show_image(True)
return item
# Méthode pour créer un menu
def update_menu(self, widget = None, data = None):
# Créer le menu
menu = gtk.Menu()
self.ind.set_menu(menu)
# Lister les post-it
listing = os.listdir('/home/nicolas/Post-it/');
for path in listing:
item = self.create_menu_item(path, "tomboy")
item.connect("activate", self.on_postit_click, path)
menu.append(item)
# Afficher le menu
menu.show_all()
# Ouvrir un post-it
def on_postit_click(self, widget, path):
subprocess.Popen('gedit ~/Post-it/' + path, shell = True)
if __name__ == "__main__":
# Catch CTRL-C
signal.signal(signal.SIGINT, lambda signal, frame: gtk.main_quit())
# Lancer l'indicator
i = IndicatorPostit()
# Boucle gtk principale
gtk.main()
j'ai le message d'erreur suivant :
File "/home/nicolas/.script_perso/Post-it-indicator.py", line 50
menu.append(item)
^
IndentationError: unindent does not match any outer indentation level
est-ce que quelqu'un peut m'aider sur ce coup ?
D'avance merci.
Hors ligne
#1569 Le 07/05/2012, à 09:21
- titan77
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
salut,
"menu.append(item)" doit être aligné avec la ligne du dessus,(indentation)
rajoute 4 espaces en debut de ligne "menu.append(item)"
"menu.show_all()" doit etre aligné avec le "for" du dessus.
pareil pour la ligne en dessous, "subprocess" doit etre décaler vers la droite.
def on_postit_click(self, widget, path):
subprocess.Popen('gedit ~/Post-it/' + path, shell = True)
normalement on utilise des tabulation plutot que des espaces pour indenter le code.c'est beaucoup plus clair que des espace.
Dernière modification par titan77 (Le 07/05/2012, à 09:29)
#1570 Le 07/05/2012, à 09:57
- Bousky
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
normalement on utilise des tabulation plutot que des espaces pour indenter le code.c'est beaucoup plus clair que des espace.
En python, l'usage est d'indenter avec quatre espaces. Vu que l'indentation est importante, ça pose des problèmes si tout le monde ne le fait pas de la même manière.
Enfin ne me lance pas sur pourquoi indenter avec des espaces est [modéré] et aligner avec des tabulations complètement [modéré]…
Dernière modification par xabilon (Le 07/05/2012, à 11:20)
Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)
Hors ligne
#1571 Le 07/05/2012, à 10:30
- titan77
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
oui mais si tu regarde dans gedit par exemple on peut regler la taille des tabulation,donc celui qui veut avoir une code bien décaler mettra 8espace pour une tabulation,et celui qui veut pas trop decaler mettra 4 espace pour une tabulation.et l'indentation sera adapter a se qu'il préfère.
maintenant si tu met des espace dans ton code,celui qui s'en servira ne pourra pas regler a sa convenance .
bien sur ce que je vient de dire je l'ai lu quelque part,c'est de là que j'ai preferé les tabulation.et c'est vrai que c'est plus pratique,ça va plus vite a réindenter tout un code en tapant une ou 2 tabulation que 4 ou 8 espace a chaque fois.
et t'a 2eme phrase sa veut dire en clair "ferme ta gueule c'est moi qui est raison,pas la peine de repondre pour argumenter de la meilleur façon"??
je rajouterait juste
sur les forum l'usage est de dire bonjour.
#1572 Le 07/05/2012, à 10:40
- redo_fr
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
Salut,
en passant une petite page (en anglais) sur les "bonnes pratiques" de la programmation en python Python best practices
Ce ne sont que des recommandations, mais elles conseillent l'utilisation de 4 espaces d'indentation dans les codes python.
# Always use 4 spaces as indent
# (Or always a Tab, but it's less good)
x = 1
if z > 5:
var1 = 55
Une autre référence (officielle): Style guide for python code
Il n'y a pas de mauvais outils, il n'y a que de mauvais ouvriers
- papy -
Personnellement, je crois que faire des procès est un signe que les affaires vont mal. Je ne dis pas que Microsoft va mal, ce n'est qu'un signe, pas un indicateur...
- Linus Torvalds -
Hors ligne
#1573 Le 07/05/2012, à 11:44
- Bousky
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
et t'a 2eme phrase sa veut dire en clair "ferme ta gueule c'est moi qui est raison,pas la peine de repondre pour argumenter de la meilleur façon"??
Elle veut dire exactement le contraire (mais tu le saurais si tu avais pris le temps de la lire et de la comprendre)… Elle veut dire que je suis moi aussi capable de déblatérer pour dire la même chose que ce que tu as dit, et cela pendant des heures, mais que je ne le fait pas car ça ne s'applique pas au python (le sujet ici) pour une raison très simple : tout le monde met des espaces. Si toi tu mets des tabulations, ça va créer des bugs lorsque quelqu'un d'autre va reprendre ton code en mettant des espaces.
je rajouterait juste
sur les forum l'usage est de dire bonjour.
Autant je suis d'accord lorsque l'on crée une discussion ou que l'on y répond pour la première fois, mais ce sujet date de 2008 et c'est loin d'être mon premier poste dedans. Quand tu entres dans une pièce contenant une centaine de personnes qui discutent, tu ne cries pas « Bonjour ! » à la cantonade à moins d'être une attention-whore ou un prof entrant dans un amphi. Et même si c'était une discussion plus « privée », ta réaction est exagérée (Comment Poser Les Questions De Manière Intelligente – ça s'applique ici (j'ai trouvé le lien via les règles du forum) même si l'on n'est pas sur un forum de hackers à proprement parler).
Par contre sur les forums, l'usage est d'écrire en français avec les règles de grammaire et de typographie qui vont avec :
Oui mais si tu regardes dans gedit par exemple on peut regler la taille des tabulations,_donc celui qui veut avoir une code bien décalé mettra 8_espaces pour une tabulation,_et celui qui ne veut pas trop décaler mettra 4 espaces pour une tabulation._Et l'indentation sera adaptée à ce qu'il préfère.
Maintenant si tu mets des espaces dans ton code,_celui qui s'en servira ne pourra pas régler à sa convenance.
Bien sûr ce que je vient de dire je l'ai lu quelque part,_c'est de là que j'ai préferé les tabulations. Et c'est vrai que c'est plus pratique,_ça va plus vite à réindenter tout un code en tapant une ou 2 tabulations que 4 ou 8 espaces a chaque fois.
Et_ta 2eme phrase ça veut dire en clair «_ferme ta gueule c'est moi qui ai raison,_pas la peine de répondre pour argumenter sur la meilleur façon_»_??
Je rajouterais juste : sur les forums l'usage est de dire bonjour.
Avant de critiquer ma manière d'écrire, occupe-toi déjà de la tienne : elle fait mal aux yeux.
PS : dans ton argumentation en faveur des tabulations, tu as oublié de parler de l'alignement entre plusieurs lignes. Et là, mettre des tabulations peut faire des ravages :
// avec 4 espaces par tabulation
if ( blabla \
--->|| blabla)
// avec 8 espaces par tabulation
if ( blabla \
------->|| blabla)
Dernière modification par Bousky (Le 07/05/2012, à 11:52)
Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)
Hors ligne
#1574 Le 07/05/2012, à 12:44
- titan77
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
ouai enfaite t'es un gros troll,sache que j'ai ecritttt vit fait,
en gros quand tu va a la boulangerie tout les jours tu ne dis plus bonjour car la premiere fosi que tu y est rentrer tu l'a déja dit(meme si ça fait 2 ans).et bein tu dois pas dire souvent bonjour alors.
un bonjour, ça veut dire ce que sa veut dire.
quelle merde le forum ubuntu quand meme ,je vois partout sur les autre forum qu'ils racontent que chez ubuntu sa prend de haut,j'en ais confirmation.
aufaite t'ai entrain de dire qu'un intervenant ici est un gros gland,puisque c'est ici que j'avais lu le truc sur les tabulation.
bon aller je repond plus et je me tate pour me désinscrire.
je suis pas dans le monde libre pour qu'on me dise ce que je doit faire.j'ai juste fait une remarque en plus.
et je vais surement pas utilisé les espace alors que les tabulation sont plus pratique.et il faut bien quelle serve la touche.
#1575 Le 07/05/2012, à 13:26
- nordinatueur
Re : [ VOS SCRIPTS UTILES ] (et eventuelles demandes de scripts...)
>>Vous pouvez vous battre ailleurs ?
J'aime beaucoup suivre ce fil.
bon aller je repond plus et je me tate pour me désinscrire.
Non mais ça va pas ? On ne se désinscrit pas pour ça enfin... Tu ne changes pas de prénom et nom à chaque fois que tu t'embrouilles avec quelqu'un.
Il faut vous tempérer. C'est facile de mal interpréter les propos d'autrui sur un forum !
>>J'en reviens au sujet initial.
Je ne sais plus où je me suis inspiré (j'ai tout copié) de ça :
Ça sert à copier/couper/coller des fichiers et dossiers comme on le fait dans un gestionnaire de fichiers graphique.
On lance copier/couper, on va dans le dossier sélectionné et on lance coller.
copier(){ while (( $# )); do cp -a "${1}" "/tmp/copie.${1}"; shift; done; }
couper(){ while (( $# )); do mv -a "${1}" "/tmp/copie.${1}"; shift; done; }
alias coller="ls -d /tmp/copie.* | sed 's,/tmp/copie.,,' | xargs -I % mv /tmp/copie.% ./%";
Bien sûr c'est l'ébauche et il faudrait améliorer encore !
Par exemple faire une fonction avec une boucle pour coller, car en l'état actuel on ne peut pas rajouter l'option -i à mv qui serait bien pratique.
Ensuite, je pense qu'il serait mieux de ne créer qu'un simple fichier avec la liste des fichiers à copier/coller pour éviter de faire deux écritures disque lorsqu'une suffit !
À bientôt les Zouzous !
Dernière modification par nordinatueur (Le 07/05/2012, à 13:29)
Linux User #508094
Pour une meilleure coopération, utilisez des liens relatifs sur le forum !
Hors ligne