Petits scripts


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.



Optipng

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

Renommer des fichiers à partir d'une liste

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

Changer de fond d'écran à intervalle régulier

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 : faire une liste des pages enregistrés

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

Scour

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é.

Inverser des variables en C

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.

Tuer un processus dés qu'il dépasse un seuil de mémoire

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.