====== Bout de scripts en vrac ======
===== dates =====
* date => timestamp : ''date -d "2008-01-17 16:05:44 CET" "+%s"''
* timestamp => date : ''date -d "1970-01-01 UTC +1200582344 seconds"'', que l'on peut formater avec par exemple ''date -d "1970-01-01 UTC +1200582344 seconds" "+%d/%m/%Y %H:%M:%S"''
===== lister fichiers avec md5, taille, etc =====
Pour faire un csv avec dossier;fichier;date;heure;taille;md5 :
rep=dossier_dans_lequel_chercher
csv=liste_fichiers.csv;
echo '"Dossier";"Fichier";md5sum;date;heure;taille' > $csv;
find "$rep" -type f|while read f;
do
fich="$(basename "$f")";
rep="$(dirname "$f")";
md5=$(md5sum "$f"|cut -d " " -f 1);
echo -n "\"$rep\";\"$fich\";$md5;">>$csv;
ls -l "$f" | awk '{print $6";"$7";"$5}' >> $csv;
done;
===== parsing de logs =====
pour récupérer les hits de certaines heures certains jours (dans des logs apache)...
for j in $(seq -w 7 11); \
do echo $j; jour="$j/Aug/2006"; \
trace=recap_06-08-${j}_2sites.log; echo>$trace; \
for f in $logs; do echo -e "\n$f">>$trace; \
for h in $(seq 17 22); do echo -n "${h}h :">>$trace; \
grep -c "$jour:$h" $f|sed '/:0$/d'>>$trace; \
done; \
done;\
done;
===== tags mp3 =====
Pour manipuler en masse des tags mp3, j'ai essayé pas mal de soft "graphique" sans grand succès (très long à tagger de nombreux fichiers). J'ai donc une ligne en shell pour extraire les infos, la manipulation des infos dans un tableur, puis la réécriture des infos en shell (expressions générées par le tableur).
Récupérer les nom de fichier mp3:
find /path/2/mp3 -name *.mp3|sed -e 's/^/"/; s/$/"/' > mp3.list
Récupérer les tags, et mettre tout ça dans un fichier texte avec | comme séparateur.
echo "Titre|Artiste|Album|Année|Commentaire|piste n°|Genre">mp3-tags.csv; \
while read ligne; do echo -n "$ligne" >> mp3-tags.csv; \
id3ed -i "$ligne"|iconv -f ISO8859-1 -t UTF8|sed -e '1 d; s/^.*:/|/'|tr -d "\n">>mp3-tags.csv; \
echo >>mp3-tags.csv; done
# dans un rep d'image d'un site qcq
# backup !
cp -a . ../img.bak
mkdir ../tmp
# les fichiers dans lesquels il faut fouiller
fichiers="../*.php ../inc/*.html ../inc/*.php ../*.css"
# on fouille
for img in *; do echo $img; >../tmp/$img.txt; for f in $fichiers; do grep -c $img $f >>../tmp/$img.txt; done;done;
# et on efface ce qui n'a renvoyé que des 0
for f in ../tmp/*.txt; do n=$(grep -v "^0$" $f|wc -l); [ $n -eq 0 ] && todel=$(basename $f .txt) && echo $todel && rm -f $todel; done;
# ensuite, si tout est OK, on peut effacer img.bak et tmp
===== Colorer la sortie d'un script =====
Pour afficher [OK] en vert et [KO] en rouge en fonction du bon déroulement d'une commande (cf une [[ http://www.trustonme.net/didactels/132.html#path_schell|liste de code couleur bash]], avec les raccourcis )
OK='[ \e[0;47m\e[0;32mOK\e[0;00m ]'
KO='[ \e[0;47m\e[0;31mKO\e[0;00m ]'
commande && echo -e $OK || echo -e $KO
===== Récupérer les journaux de france culture =====
D'après leur podcast
[ $# -ne 1 ] && echo "Il faut passer un argument (7,12,18,22) pour le journal choisi)" && exit 1
urls=([7]=http://radiofrance-podcast.net/podcast09/rss_10055.xml [12]=http://radiofrance-podcast.net/podcast09/rss_10059.xml [18]=http://radiofrance-podcast.net/podcast09/rss_10060.xml [22]=http://radiofran
url=''
for i in ${!urls[*]}
do
[ $1 -eq $i ] && url=${urls[i]} && h=$i
done
[ -z "$url" ] && echo "Vous devez donner un journal existant (7, 12, 18 ou 22)" && exit 1
wget $url -O fc${h}.xml
mp3=$(sed -nre '
{
:boucle
N
$! b boucle
}
s#.*http://([^<]*).*#http://\1#p' < fc${h}.xml)
echo -e "\nOn va essayer de récupérer \e[0;47m\e[0;32m$mp3\e[0;00m\n"
wget "$mp3" -O fc${h}.mp3 && rm -f fc${h}.xml
Et avec zenity (à peaufiner...)
#!/bin/bash
# les urls des rss, à modifier si ça devait changer...
urls=([7]=http://radiofrance-podcast.net/podcast09/rss_10055.xml [12]=http://radiofrance-podcast.net/podcast09/rss_10059.xml [18]=http://radiofrance-podcast.net/podcast09/rss_10060.xml [22]=http://radiofrance-podcast.net/podcast09/rss_10061.xml)
# qq tests
which zenity >/dev/null
# Attention avec $?, 0 => OK, on change
[ $? -eq 0 ] && zenok=TRUE || zenok=FALSE
which notify-send >/dev/null
[ $? -eq 0 ] && notifok=TRUE || notifok=FALSE
# faudrait plutôt se baser sur le test [ -z "$TERM" ]
# les fonctions
get_heure() {
if [ $# -eq 0 ] && [ "$zenok" = "TRUE" ]
then
ret=$(zenity --title='Lequel ?' --text="Attention, pas de barre de progression,\nça télécharge puis s'ouvrira tout seul" --height=250 --list --radiolist \
--column='' --column='Journal de' \
'FALSE' 7h \
'TRUE' 12h30 \
'FALSE' 18h \
'FALSE' 22h)
[ -z "$ret" ] && exit 0 # clic sur annuler
case "$ret" in
7h) h=7;;
12h30) h=12;;
18h) h=18;;
22h) h=22;;
*) set_msg "Heure $ret inconnue" && exit 1;;
esac
else
[ $# -ne 1 ] && echo "Il faut passer un argument (7,12,18,22) pour le journal choisi)" && exit 1
h=$1
fi
return $h
}
set_msg() {
[ $notifok = "TRUE" ] && notify-send -t 1000 $1 || echo $1
}
check_heure() {
url=''
for i in ${!urls[*]}
do
[ $1 -eq $i ] && url=${urls[i]} && h=$i
done
[ -z "$url" ] && set_msg "Vous devez donner un journal existant (7, 12, 18 ou 22)" && exit 1
}
ask2continue() {
if [ $zenok = TRUE ]
then
zenity --question --text="$1"
[ $? != "0" ] && exit 0
else
echo $1
echo "Continuer ? (o/n)"
read rep
[ "$rep" != 'o' ] && echo "Abandon" && exit 0
fi
}
get_url() {
xml="/tmp/fc${h}.xml"
wget $url -O "$xml"
mp3=$(sed -nre '
{
:boucle
N
$! b boucle
}
s#.*http://([^<]*).*#http://\1#p' < $xml)
jour=$(date '+%d.%m.%Y')
[ "$(echo $mp3|grep -c $jour)" != '1' ] && ask2continue "Apparemment ce n'est pas le journal du jour : $mp3\nOn continue quand même ?"
# si abandon on est déjà sorti
fich=/tmp/fc${h}.mp3
wget "$mp3" -O $fich
if [ $? ]
then
rm -f fc${h}.xml
set_msg "On a récupéré un mp3 ($fich)"
xdg-open $fich
# rm -f $fich # xdg rend la main tout de suite
fi
}
# et le main
get_heure $*
h=$?
check_heure $h
get_url $url