Mot-clé - scripts

Fil des billets - Fil des commentaires

vendredi, 4 septembre 2009

Convertir WMA vers OGG

J'ai retrouvé, il y a peu, quelques vestiges de ma (lointaine) époque sous Windows: des répertoires entiers remplis de fichiers WMA.

J'ai donc entrepris de réaliser un script me permettant d'encoder rapidement tout ça et d'en faire des fichiers au format ogg. Comme vous allez le voir dans le script il faut procéder en deux étapes et encoder le fichier une première fois en wav pour ensuite convertir ce même fichier au format final ogg.

Voici donc ce que j'ai utilisé pour réaliser cette opération.

#!/bin/sh
start_script=$(date +'%T')
###
# On récupère le chemin
###
PATH_DIR="$1"
CHECK="" 
###
# Au besoin on ajoute un / a la fin du chemin fourni
###
if [ -d ${PATH_DIR} ] && [ -z $(echo ${PATH_DIR} | grep -e '/$') ]
then 
	PATH_DIR=$1"/"
fi
 
function usage() {
echo "
$0 /path/dir/[file.wma]
$0 doit etre suivi d'un fichier ou repertoire contenant les fichiers wma à convertir
"
}
 
###
#On verifie les arguments passés aux script
###
if [[ $# -lt 1 ]]
	then
	echo "argument manquant"
	usage
	exit 1
fi
 
###
# On vérifie le chemin mentionné
###
 
 
if [ ! -f "${PATH_DIR}" ] && [ ! -d "${PATH_DIR}" ]
	then
	echo "Le chemin spécifié n'existe pas"
	exit 1
fi
 
###
# On génère la liste des fichiers à encoder
###
 
find "${PATH_DIR}" -iname "*.wma" | sed -e 's/^\.\///g' > $PATH_DIR"files_list"
 
###
# On récupère le nombre de fichiers à encoder
###
file_total=$(awk 'END { print NR }' "${PATH_DIR}"files_list)
 
 
###
# Pour chaque fichier wma trouvé
###
 
while [[ i -lt $file_total ]]
do
	echo ""
	((i++))
	file_name=$(awk 'NR=='$i'{print $0}' "${PATH_DIR}"files_list)
	start_file=$(date +'%T')
	echo "echo 'extraction du fichier source'; mplayer -vo null -ao pcm:file=\""$file_name".wav\" \""$file_name"\" 1>/dev/null; echo 'OK'" | sh
	echo "echo 'conversion au format OGG'; oggenc -q  5 -o \"$(echo ${file_name} | cut -d. -f1).ogg\" \""$file_name".wav\" 2>/dev/null; echo 'OK'" | sh
 
###
# Suppression du fichier temporaire
###
	rm -f "$file_name".wav
	end_file=$(date +'%T')
	diffSec=$(( $(date --date $end_file +%s) - $(date --date $start_file +%s) ))
	echo "fichier extrait : $(echo ${file_name} | cut -d. -f1).ogg"
	echo "durée de l'encodage : "$((diffSec%60))sec
done
 
end_script=$(date +'%T')
###
# Bilan de l'action
###
diffSec=$(( $(date --date $end_script +%s) - $(date --date $start_script +%s) ))
echo " durée du traitement : "$((diffSec/60))"min"$((diffSec%60))sec
echo "nombre de fichiers convertis : "$file_total
 
 
rm -f $PATH_DIR"files_list"

Voila; le script est relativement commenté; et certainement perfectible. pour ma part j'ai rencontré un bug pour les fichiers dont le nom comporte plus d'un espace consécutif( " "). il est largement envisageable de rajouter une fonction visant a renommer les fichiers posant problèmes et supprimer les esapces en trop.

En éspérant que ça puisse aider/inspirer des gens.

Très Cordialement :)

mardi, 4 août 2009

[awk] parser /etc/services

Je cherchais un moyen de mettre en forme un script qui interrogeais mon fichier /etc/services voila donc une petite ébauche. Ce script utilise la commande awk d'une façon primaire mais introduit une syntaxe relativement pratique au quotidien.
on distingue, dans notre cas, deux parties. La première délimitée par des // contient une occurrence que nous cherchons. il est à noter que ce champ supporte les expressions régulières et est donc hautement configurable en fonction de votre besoin.
La deuxième partie de la commande permet de mettre en forme la sortie de la commande.
Maintenant que nous avons vu un peu comment était constitué la sytanxe de la commande awk passons au script.

#!/bin/sh
 
# emplacement du fichier services
FILE="/etc/services"
 
# numéro du port ou nom du service
PORTNUMBER="$1"
 
awk '/\t'$1'\/|^'$1'/{print "service = "$1; print "port/type = "$2;$1 = "";$2 = "";print "Description = "$0;print ""}' $FILE

me reste a régler quelques petits truc mais ça fonctionne plutôt bien :

flopc sh # ./services_parser.sh ssh
service = ssh
port/type = 22/tcp
Description =   # SSH Remote Login Protocol

service = ssh
port/type = 22/udp
Description =  

flopc sh # ./services_parser.sh 21 
service = ftp
port/type = 21/tcp
Description =   # File Transfer [Control]

service = ftp
port/type = 21/udp
Description =   fsp fspd

Il est bien sûr évident que ceci ne constitue qu'une infime partie de la puissance d'awk qui est à lui seul un véritable langage de développement. En espérant que ce petit aperçu vous aura donné envie d'approfondir la connaissance de ce merveilleux outil.

liens connexes:

http://www.linux-pour-lesnuls.com/gawk.php
http://www.waterproof.fr/products/PHPEdit/manual/fr/module.FindRegExp.html
http://www.wagoneers.com/UNIX/AWK/awk.html
http://www.info.univ-angers.fr/aides/tutawk.html

mardi, 21 octobre 2008

Tips & tricks

Tips & tricks supprimer les fichiers les plus gros d'un répertoire /// for i in `du -a /media/data | sort -n -r | head -n 20 | cut -d'/' -f2-`; do if [ ! -d /$i ]; then ls -l /$i;rm -i /$i; fi; done /// Suite au commentaire de lone wolf voici une commande beaucoup plus élégante /// find ./ -maxdepth 1 -type f -printf "%b\t%p\n" \ | sort -n -r | head -n 20 | cut -f 2 | xargs rm -v ///

lundi, 30 juin 2008

Gestion de dates de certificats

J'ai eu à me demander comment gérer efficacement les certificats délivrés par mon autorité de certification et prévenir simplement les utilisateurs de mes certificats de l'expiration de ces derniers. voici donc un petit script constituant une ébauche en ce sens.

Lire la suite...

lundi, 23 juin 2008

Substitution avec Sed

Bon comme ça m'a pris plus de deux minutes pour trouver je la file ici pour virer les tabulations dans un output de commande rien ne vaut un bon p'tit

# remplace toutes les tabulations dans une chaine de caractère
sed -e  "s/\t//g"
# remplace les premières tabulations de chaque ligne
sed -e 's/^[\t ]//g'
# un exemple concret
screen -ls| grep ssh-agent |sed -e "s/\t//g" |cut -d '(' -f1

Il doit donc en être de même pour tous les autres caractères spéciaux utilisés ( \n, \t ,...)

lundi, 31 mars 2008

Scapy ou "Je fais ce qu'il me plait; avec mes paquets"

Plus vraiment la peine de le présenter. Voila un outil qui saura ravir tout le monde tant par sa puissance que par sa (toute relative) simplicité de fonctionnement. Alors sans plus attendre une petite présentation de Scapy et des quelques découvertes que j'ai pu faire concernant l'usage de ce merveilleux outil.

Lire la suite...

mardi, 5 février 2008

Gestion de ports sur la boiboite

lassé de; sous prétexte que je laisse certains ports ouverts pour mon usage toute la journée; prendre des brutes forces dans tous les sens. J'ai cherché un moyen de gérer ces derniers uniquement selon mon besoin. Voici la méthode que j'ai utilisé.

Lire la suite...

jeudi, 10 janvier 2008

Bridge Tap virtualiser

Pour les besoins de la formation et satisfaire à ma feignantise voici un petit script permettant de créer des interfaces réseaux virtuelles

Lire la suite...