My Own Memory Hole
Blog♯bash

Générer des playlists pour MPD avec les dernières pistes ajoutées

Afin de retrouver facilement dans ncmpcpp les dernières pistes ajoutées à ma bibliothèque, j'ai trouvé et adapté le script suivant.

$ nano ~/bin/lastaddedmpd
#!/bin/bash

cd /home/$USER/NAS/Musique
find . -type f -ctime -1 | egrep '\.mp3$|\.flac$' | awk '{ sub(/^\.\//, ""); print }' | sort -n > /home/$USER/NAS/Musique/playlists/$(date +%d-%m-%Y)_last_$1_days.m3u
$ chmod +x ~/bin/lastaddedmpd

Et on lance la commande lastaddedmpd avec pour argument le nombre de jours à prendre en compte.

Quels outils pour réduire CSS et JS ?

cleancss

$ sudo apt install cleancss

Ensuite, il suffit de lancer la commande :

$ cleancss -o mon_fichier.min.css mon_fichier.css

Traitement par lot

Mais c'est un peu lassant de répéter cette opération lorsque l'on a de multiples fichiers à traiter. J'ai donc adapté le script proposé par Marco G qui utilise yui-compressor.

On crée donc le script mincss dans un répertoire bin de notre home puis on le rend exécutable avant d'y coller le script ci-dessous :

$ mkdir /home/$USER/bin
$ touch /home/$USER/bin/mincss
$ chmod +x /home/$USER/bin/mincss
$ nano /home/$USER/bin/mincss
#!/bin/sh
echo Compressing CSS Files...
saved=0
for f in `find -name "*.css" -not -name "*.min.css"`;
do
    target=${f%.*}.min.css
    echo "\t- "$f to $target
    FILESIZE=$(stat -c%s "$f")
    cleancss -o $target $f
    FILESIZEC=$(stat -c%s "$target")
    diff=$(($FILESIZE - $FILESIZEC))
    saved=$(($saved + $diff))
    echo "\t  $diff bytes saved"
done
echo "Done ! Total saved: $saved bytes"

UglifyJS

Pour les fichiers Javascript, j'utiliser UglifyJS

$ sudo apt install node-uglify

ou en utilisant npm l'utilitaire de gestion des paquets de NodeJS :

$ sudo npm install -g uglify-js

La commande uglifyjs est désormais disponible :

$ uglifyjs mon_fichier.js -o mon_fichier.js.min.js

Ajouter la compression :

$ uglifyjs mon_fichier.js -o mon_fichier.minc.js -c

Ajouter en plus l'« altération » :

$ uglifyjs mon_fichier.js -o mon_fichier.minc.js -m

On peut ainsi lancer la commande pour n'obtenir plus qu'un fichier à partir de tous les fichiers spécifiés :

$ uglifyjs *.js -o output.js -c -m

uglifyjs-folder

Pour traiter l'ensemble des fichiers d'un répertoire (et de ses sous-répertoire), on peut également utiliser uglifyjs-folder.

$ sudo npm install -g uglifyjs-folder

Pour compresser tous les fichiers d'un répertoire, il suffit de lancer :

$ uglifyjs-folder mon_dossier/ -o script.min.js

On peut aussi vouloir conserver des fichiers séparés, ce que permet l'option -e ; dans un tel cas, l'arborescence du dossier traité est conservé dans le répertoire indiqué avec l'option o :

$ uglifyjs-folder ../test/ -o output/ -e

Un petit script pour écouter la radio depuis un terminal

Afin de faciliter l'écoute de certaines radio en streaming, et surtout sans utiliser un navigateur web, de plus en plus gourmand en ressources, j'utilise désormais un petit script bash qui utilise mplayer.

$ mkdir /home/$USER/bin
$ touch /home/$USER/bin/radio
$ chmod +x /home/$USER/bin/radio
$ nano /home/$USER/bin/radio
#!/bin/bash

usage ()
{
    echo '*****************************************************'
    echo '******************** Radio **************************'
    echo '*****************************************************'
    echo '  - beaub     : BeaubFM, radio associative de Limoges'
    echo '  - culture   : France Culture'
    echo '  - info      : France Info'
    echo '  - inter     : France Inter'
    echo '*****************************************************'
}

case $1 in
    beaub )         mplayer http://beaubfm2.ice.infomaniak.ch/beaubfm2-96.mp3
                    ;;
    culture )       mplayer http://direct.franceculture.fr/live/franceculture-midfi.mp3
                    ;;
    info )          mplayer http://direct.franceinfo.fr/live/franceinfo-midfi.mp3
                    ;;
    inter )         mplayer http://direct.franceinter.fr/live/franceinter-midfi.mp3
                    ;;
    -h | --help )   usage
                    exit
                    ;;
    * )             usage
                    exit 1
esac

Ensuite, il suffit de choisir sa radio et de lancer la commande suivante (par exemple) :

$ radio culture

Auto-complétion des stations

On crée le fichier radio-completion.bash :

$ nano /home/$USER/bin/radio-completion.bash

dans lequel on colle les deux lignes suivantes :

#/usr/bin/env bash
complete -W "beaub culture info inter" radio

lancez la commande suivante :

$ source /home/$USER/bin/radio-completion.bash

Et vous devriez avoir les stations qui vous sont proposées lorsque vous pressez la touche Tab à la suite de la commande radio et au fur et à mesure de votre saisie.