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, mais au cas où l'envie vous prend de les réutiliser, servez-vous !
Notez que ces scripts sont brutes : ils marchent suffisamment bien pour moi, mais ils méritent à être améliorés pour certaines applications. Dans tous les cas, 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
Dans la même veine que le code précédent, voici un script qui optimise toutes les images d’un dossier (png mais aussi jpeg, en destructif et non destructif) :
#!/bin/bash # Required commands : # - optipng # - pngnq # - jpegoptim # - rename # - imagemagick # imagemagick (removes Alpha : is destructive) mogrify -alpha remove -background white *.png # pngnq (is destructive) pngnq -vf -s1 *.png rename -f 's/-nq8.png$/.png/' *.png # optipng (non destructive) optipng *.png # reduce JPG quality to 70% (destructive) jpegoptim --max=70 *.jpg # optimize JPG (non-destructive) jpegoptim *.jpg
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 script 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 nettoie 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; }
Cependant, comme le fait remarquer un lecteur, David, utiliser cette méthode peut aboutir à un dépassement de la mémoire lors de l’opération a=a+b, car le type int de a est limité.
Source, sur CCM qui utilise une méthode avec des pointeurs.
Meewan, un lecteur, me donne également cette variante, qui devrait fonctionner pour tous les types de variables (pas juste des int) :
#include <stdio.h> void main () { int a = 2, b = 5; printf("Avant : a=%d, b=%d\n", a, b); a ^= b; b ^= a; a ^= b; printf("Apres : a=%d, b=%d\n", a, b); return 0; }
L’astuce fonctionne grâce à l’opérateur « XOR » (le ^), qui fonctionne au niveau binaire des variables.
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
Ce script affiche un popup (pour GNOME) avec un curseur demandant une valeur entre 5 et 100. Le nombre choisis sera le pourcentage de redimensionnement des images du dossier courant.
#!/bin/bash RETOUR=`zenity --scale --text "Pourcetage de réduction :" --value=50 --min-value=5 --max-value=100 --step=1`; for i in *.JPG do convert "$i" -resize $RETOUR% "$i"; done notify-send --icon="info" "Images rétrécies";
Ici, une version améliorée, où il demande un pourcentage de réduction de la taille puis la qualité de l’image JPG. Plus la qualité est basse, plus la taille du fichier est optimisée. Pour les photos, il n’est en général pas nécessaire d’aller au dessus de 80%, la qualité visuelle n’est pas meilleure mais le poids du fichier est beaucoup plus grand quand même (voir ici pour plus de détails sur la compression des images).
#!/bin/bash SIZE=`zenity --scale --text "Pourcetage de réduction :" --value=50 --min-value=5 --max-value=100 --step=1` QUALITY=`zenity --scale --text "Pourcentage de conpression JPEG :" --value=85 --min-value=5 --max-value=100 --step=1` for i in *.JPG do convert "$i" -quality $QUALITY -resize $SIZE% "$i"; done notify-send --icon="info" "Toutes les conversion sont terminée !" ":-)";
Ce script récupère le son de tous les fichiers vidéo d’un dossier. Il produit du MP3 à 160 kbps (si les vidéos viennent de youtube, inutile de faire plus haut).
À chaque fichier converti, un fichier MP3 est créé, et un message OSD est produit. Les paquets avconv, notify-send et les codecs doivent être installés sur le système.
#!/bin/bash for i in *; do avconv -i "$i" -c:a libmp3lame -ab 160k "$i.mp3"; notify-send --icon="info" "Conversion terminée" "$i" --expire-time=2000; done notify-send --icon="info" "Toutes les conversion sont terminée !" ":-)";
Ce script renome tous les fichiers JPG du dossier avec des noms aléatoires.
#!/bin/bash for i in *.jpg do mv $i $(uuidgen | cut -d '-' -f 1).jpg; done
Page créée en juillet 2010, mis à jour le mardi 11 novembre 2014.
Adresse de la page : http://lehollandaisvolant.net/linux/scripts/