Voici mes petits scripts, souvent fait moi même. Rien d'extraordinaire mais certains sont bien pratiques. Je les met en ligne pour moi même surtout, mais au cas où l'envie vous prend de les ré-utiliser, faites donc : ce n'est pas pour rien qu'ils sont en ligne ;-)/
Ces scriptes sont brutes, ils marchent suffisamment bien pour moi, mais ils seraient largement à améliorer. Faites quand même attention…
Voici un site avec plein de scripts : www.bashscripts.info.
Comme je prête une certaine importance à l'optimisation de la vitesse d'affichage des pages de mon site, et plus particulièrement des images, j'utilise souvent Optipng. Je me suis inspiré de cette page et j'ai pondu ça :
#!/bin/bash
gnome-terminal -x bash -c 'optipng *.png && echo --- D0NE --- ; read'
En lançant ce script, ça optimise tous les fichiers PNG du dossier avec optipng. Ma touche perso étant d'ouvrir un terminal (pour suivre le déroulement des opérations) et surtout de le laisser ouvert et d'afficher "DONE" quand le script a fini de s'exécuter
Si j'ai un dossier avec des fichiers nommés "01.mp3", "02.mp3", "03.mp3", etc. et que j'ai un fichier texte contenant des noms plus précis, ce script permet de renommer tous les fichiers par le noms dans le fichier texte. Par exemple, plus besoin de renommer à la main les 20 pistes d'une CD que vous venez de ripper, si vous avez les noms des pistes dans un dossier !
Attention : si votre fichier texte est mal fait (pas assez de noms pour chaque fichier par exemple) il se peut que certains fichiers soient supprimés. Faites une sauvegarde du dossier avant d'appliquer le script, c'est plus sûr.
Les fichiers sont renommés dans l'ordre d'apparition dans le dossier et en lisant ligne par ligne dans le fichier des noms
#!/bin/bash no_ligne=0 while read line do tableau[no_ligne]="$line" let no_ligne=no_ligne+1 done < noms_de_fichiers.txt cd dossier_de_fichiers; p=0 for no_file in *.mp3 do mv $no_file "${tableau[p]}.mp3" let p=p+1 done
Ce script marche sous Gnome (dépend de Gconf-editor). Il change juste la clé correspondant à l'image de fond dans les fichiers Gconf, toutes les demi-heures.
#!/bin/bash dossierimages="$HOME/Images/wallpaper/" # chemin du dossier des images images_dispo=`ls $dossierimages` for image_courant in $images_dispo do gconftool-2 --set /desktop/gnome/background/picture_filename --type string "$dossierimages$image_courant" sleep 1800 # durée en seconde done
Scrapbook est une extension de Firefox qui permet d'enregistrer/annoter des pages web. L'extension n'est disponible que sous Firefox, mais les pages sont au format HTML, donc parfaitement lisibles dans les autres navigateurs.
Ce scripte crée une page HTML avec la liste des pages scrapbookés. À chaque fois un lien vers la page enregistré est donné, ainsi qu'un lien vers la page en ligne.
Avant d'exécuter le script, il faut se trouver dans le dossier "data" de scrapbook.
#!/bin/bash outfile=$HOME/Bureau/log.html echo '<!DOCTYPE html> <head> <meta charset="UTF-8"> <title>Mes pages Scrapbookés</title> <style type="text/css"> #list li img { width:16px; height:16px; margin-right: 5px; } #list li a { line-height:18px; vertical-align:middle; } #list li a { color:gray; text-decoration:none; } #list li a:hover { color:black; text-decoration:underline; } </style> </head> <body> <ul id="list">' > $outfile # on liste les pages scrapbookés i=0 for subfol in $(find $PWD -type d -maxdepth 1 -mindepth 1) do listefld[$i]=$subfol ((i++)) done # on recherche via grep le lien et le titre des pages. for i in "${listefld[@]}" do echo "<li><a href=\"$i/index.html\"> <img src=\"$i/favicon.ico\" /> `grep "^title" "$i/index.dat" | cut -c 7- `</a> - <a href=\"`grep "^source" "$i/index.dat" | cut -c 8- ` \"> (voir en ligne)</a></li>" >> $outfile done echo -e "</ul>\n</body>\n</html>" >> $outfile
Le script Scour n'est pas de moi : il permet de nettoyer les fichiers SVG, un peu comme Optipng nettoyée les fichiers png. Le problème, c'est que scour conserve le fichier source et crée un fichier de destination.
Ce script supprime le fichier source s'il est optimisé et le remplace par le fichier destination.
#!/bin/bash
i=0
j=0
# On liste les fichiers SVG dans un tableau :
for file in $(find $PWD -type f -name "*.svg")
do
listefile[$i]=$file
((i++))
done
# On applique scour sur chaque entrée du tableau :
for i in "${listefile[@]}"
do
python ~/.scour/scour.py -i $i -o $i.cc
val=`grep "svg" $i.cc`
# si scour appliqué correctement, ne garde que le fichier optimisé
if [ -n "$val" ]
then
echo "$i OK"
mv $i.cc $i
else
echo "$i NON OK"
rm $i.cc
fi
((j++))
echo $j
done
Une nouvelle fois, c'est un script suffisamment bon pour moi, mais qui peut largement être amélioré.
D'habitude on est obligé d'utiliser une troisième variable, temporaire. Ici, non grâce à une jonglerie mathématique simple :
#include <stdio.h>
void main ()
{
int a = 2, b = 5;
printf("Avant : a=%d, b=%d\n", a, b);
a = a + b;
b = a - b;
a = a - b;
printf("Apres : a=%d, b=%d\n", a, b);
return 0;
}
Source, sur CCM qui utilise une méthode avec des pointeurs.
Ce script affiche un popup (pour GTK+/GNOME) dés qu'un processus (déclaré par NAME) dépasse un seuil de mémoire (MEM_LIM).
Vous avez alors la possibilité de le tuer où d'attendre 30secondes.
Ici, l'avertissement sera rappelé toutes les 30 secondes, c'est le « sleep 30 » en bas.
#!/bin/bash
# Process name to check out
NAME=firefox
# Memory limit, in Ko
MEM_LIM=500000
while [ 1 = 1 ]
do
PROCESS=$(pgrep -c $NAME); # count processes
[[ ${PROCESS} -ne 0 ]] && {
# get mem (in KB) of process 'NAME'
VALMEM=`ps -e orss,comm | grep $NAME | cut -d ' ' -f 1`
if [ $VALMEM -gt $MEM_LIM ]
then
zenity --question --text "$NAME reaches $VALMEM KB" --ok-label "Kill $NAME" --cancel-label "Remember later"
RETOUR="$?"; # annuler = 1 ; valider = 0
if [ $RETOUR = 0 ]
then
kill -9 `pgrep $NAME`;
zenity --info --text "$NAME successfully killed"
exit 0
fi
fi
}
sleep 30
done
exit 0
Page créée en juillet 2010
Mis à jour le dimanche 22 mai 2011.