Tag script
-
Rechercher des fichiers sur un critère de nombre de lignes
L’un de mes scripts génère des fichiers de résultats et ceux ci commencent par un entête connu. Comme le script n’est pas parfait, il génère des fichiers sans aucun contenu autre que l’entête.
Pour corriger cette anomalie, il faut empêcher le script de générer les fichiers inutiles et il s’agit certainement de la meilleure solution. Mais il est également possible de supprimer les fichiers ne contenant que l’entête.Avec qu’elle commande peut on supprimer des fichiers contenant un certain nombre de ligne ?
-
Connaitre son adresse IP publique
Parfois, il est utile de connaitre son adresse IP publique. Rien de difficile, il suffit de se rendre sur l’une des adresses suivantes et elle sera affichée :
- http://checkip.dyndns.org
- http://www.monip.org/
- http://www.micromedica.net/
- http://www.mon-ip.fr/
- http://myip.dnsomatic.com/
Si l’on veut utiliser cette adresse dans un script comme Conky, il faut utiliser la commande :
wget -q -O - checkip.dyndns.org | sed -e 's/[^[:digit:]|.]//g'
Les liens fonctionnent quelque soit le système d’exploitation. Par contre, sous windows, il faut installer wget au préalable ; il est téléchargeable depuis cette page et la version portable est disponible sur celle-ci.
Si curl est installé sur votre système, vous pouvez également utiliser l’une des commandes suivantes :
echo `curl -s http://myip.dnsomatic.com`
curl ifconfig.me
curl icanhazip.com
En se rendant à l’adresse http://ifconfig.me/ on peut découvrir d’autres paramètres.
-
Supprimer des process avec la commande xargs
Sur un serveur en Solaris 7, suite au remplissage d’un FileSystem, des process démarraient mais ne se fermaient pas correctement car les codes d’erreurs ne doivent pas être interprêtés correctement. Au final, on se retrouve avec plus de 2000 process qui ne devraient pas être présents et une machine qui rame car le nombre de process est trop important et que toutes les ressources sont occupées.
Pour résoudre le problème on peut rebooter le serveur (méthode windows : toute machine doit être rebootée plusieurs fois par jour), ou alors supprimer les process consommateurs de ressource.
-
Le GPS Evadeo X60 et les convertions des fichiers de traces
Comme beaucoup, j’ai cédé à la mode et je me suis acheté un GPS. Mon choix s’est porté sur le modéle Evadéo X60 de l’IGN.
Le critère principal ayant guidé mon choix est le fait que les GPS de l’IGN permettent de charger des cartes au format 1:25000. Ils sont donc utilisables lors des randonnées.
Pour la compatibilité avec Linux, il faut insérer la carte SIM du GPS dans le lecteur du PC et y copier ou récupérer les données avec le gestionnaire de fichier (Nautilus puisque j’utilise Gnome). Pour tracer mes randonnées, j’utilise une VM (Virtual Machine ou Machine Virtuelle) dans laquelle fonctionne le logiciel IGN-Rando sous XP.Hormis l’apprentissage du GPS, la difficulté se situe dans les formats des fichiers de traces qui sont différents suivant l’outil utilisé.
Les formats des fichiers de traces
Pour manipuler les tracés des circuits de randonnées, je suis obligé d’utiliser 4 formats différents de fichiers :
- IGN-Rando sauvegarde les tracés sous un format rdn. Tous mes tracés de randonnées utilisent ce format.
- Google utilise le format KML pour Google-Map et Google-Earth. J’utilise ce format pour publier des aperçus des randonnées sur la site de Henchou Don Lanvaeleg.
- Le GPS Evadeo sait lire des tracés au format gpx.
- Les traces capturées par la GPS sont au format TRK
Le logiciel IGN-Rando n’est plus commercialisé, il a été remplacé par Georando
Avec tous ces formats différents, il faut pouvoir passer de l’un à l’autre sans devoir refaire le tracé !
Gpsbabel : l’outil de conversion
Heureusement, une solution existe pour la conversion des différents formats de fichier, il s’agit de gpsbabel. Il est disponible pour différentes distributions et sous Ubuntu, il s’installe avec la commande
sudo apt-get install gpsbabel
Il existe également une interface graphique pour gpsbabel, il s’agit de gebabbel qui s’installe avec la commande
sudo apt-get install gebabbel
L’outil gpsbabel existe également pour Windows, mais n’ayant pas de poste sous cet OS, je ne l’ai pas testé.
La syntaxe pour utiliser gpsbabel est la suivante :
/usr/bin/gpsbabel [options] -i INTYPE -f INFILE -o OUTTYPE -F OUTFILE
avec :
- options donne le type de tracé à convertir
- INTYPE le type du fichier d’entrée et INFILE le nom du fichier d’entrée
- OUTYPE le type du fichier de sortie et OUTFILE le nom du fichier de sortie
Le détail des options et des types de fichiers est donné dans l’aide (commande man gpsbabel`) ou sur cette page.
Les commandes de convertion
Pour les différentes convertions que j’ai besoin, j’utilise les commandes suivantes :
- convertir un fichier RDN vers GPX
gpsbabel -t -N -i ignrando -f Ma_Rando.rdn -o gpx -F Ma_Rando.gpx
- convertir un fichier RDN vers KML
gpsbabel -t -N -i ignrando -f Ma_Rando.rdn -o kml -F Ma_Rando.kml
- convertir un fichier KML vers GPX
gpsbabel -t -N -i kml -f Ma_Rando.kml -o gpx -F Ma_Rando.gpx
- convertir un fichier TRK vers RDN
gpsbabel -t -i compegps -f Ma_Rando.TRK -o ignrando -F Ma_Rando.rdn
Automatiser les convertions
Pour faciliter ces différentes convertions, j’utilise un script Nautilus qui réalise le traitement en fonction du type de fichier.
-
Renommer des fichiers
Pour renommer facilement des fichiers, rien de plus pratique qu’un script nautilus !
J’ai modifié mon script décrit sur cette page pour que le nouveau nommage garde l’ordre de tri.Pour installer ce script, il faut copier le contenu dans un fichier du dossier
$HOME/.gnome2/nautilus_scripts
, chez moi il s’appellerenomme_fichier.sh
. Il faut ensuite le rendre exécutable avec la commande `chmod 755 renomme_fichier.sh.Dépendance : zenity est requis pour afficher les fenêtres d’information, pour l’installer :
aptitude install zenity
.Il a été testé sous Debian SID et Ubuntu 9.04, il doit fonctionner avec n’importe qu’elle distribution.
#!/bin/bash # Author : YLP http://www.saintcarre.fr/ # depends: zenity # # version 0.1 du 24/11/2008, creation # Objet : renomme les fichiers sélectionnés en gardant l'extension # # Version 0.2 du 27/08/2009 # La numerotation se fait sur 3 digit pour faciliter les tris. #========================================= # Definition des messages title="Renommage de fichiers JPG" err1="Il faut sélectionner un ou plusieurs fichiers." chaine="Les fichiers seront renommés avec la racine spécifiée suivi d'un N° de 001 à XXXXXX." entree="Nouvau nom" err2="Vous n'avez pas saisi de nom de fichier." msg_renomm="Renammage en cours ..." #========================================= curdir=`pwd` #test if a file has been selected if [ $# -eq 0 ]; then zenity --error --title="Error" --text="$err1" exit 1 fi #Choix du nouveau nom des fichiers NouvNom=`zenity --entry --title "$title" --text "$chaine" --entry-text "$entree" ` #if $? != 0, user click on cancel button, so exit if [ "$?" != 0 ] ; then exit fi #Verification du nom du fichier if [ ! "$NouvNom" ]; then zenity --error --title="$title" --text="$err2" exit 1 fi nbfiles=$# #========================================= #echo "Renommage des fichiers, nombre de fichiers a traiter : $#" num=0 (while [ $# -gt 0 ]; do type=`echo $1 | cut -f2 -d"."` let "compteur += 1" num=$(($num+1)) if [ $num -gt 0 ] && [ $num -lt 10 ]; then # pour les paramètres 1 à 9 numero=00$num # rajouter 2 digit => 001, 002, 003,..., 009 fi if [ $num -gt 9 ] && [ $num -lt 100 ]; then # pour les paramètres 10 à 99 numero=0$num # rajouter 1 digit => 010, 011, 012,..., 099 fi if [ $num -gt 100 ] ; then # pour les paramètres supérieur à 100 numero=$num # ne pas rajouter de digit => 100, 101, 102,... fi #echo "Renomage de $1 en $NouvNom-$numero.$type" mv $1 $NouvNom-$numero.$type let "progress = compteur*100/nbfiles" echo $progress shift done ) | zenity --progress --auto-close --title="$title" --text="$msg_renomm" --percentage=0 exit
-
Savoir si un reboot est requis après une mise jour
Suite à certaines mises à jour, il est nécessaire de redémarrer le système pour qu’elles soient prises en compte, en particulier pour les mises à jour du noyau.
Si l’on est connecté directement sur le PC, on voit l’icone de notification dans la barre de menu de Gnome. Si l’on accède à distance à cette station, on ne voit généralement pas cette icone !
-
Enchainer des actions via SSH sur plusieurs PC
SSH est le protocole sécurisé d’accès distant à des stations ou des serveurs sous Linux ou Unix. A chaque connexion vers une machine distante, il faut saisir sa passphrase pour s’authentifier. Dans le cas ou l’on veut enchainer une suite d’opération sur une liste de machine, cette saisie devient vite fatigante.
Pour éviter cet inconvénient, certains génèrent des clefs SSH sans passphrase ce qui est en contradiction avec avec l’objectif premier de SSH : sécuriser l’accès. En utilisant ssh-agent, il est possible de saisir qu’une seule fois et d’enchainer une opération sur plusieurs stations.
-
Memento sed
Quelques commandes utiles avec la fonction sed.
J’avais déja pris quelques note sur sed dans cet article sed : afficher un fichier sans les lignes de commentaires
-
Convertion d'images
L’outil ImageMagick permet de manipuler les images, en particulier de les redimensionner sur un site internet.
L’outil Jhead permet de lister et de modifier les données Exif d’une image.
Les images publiées sur ce site et sur celui de Henchou Don Lanvaeleg sont préparées en utilisant ces outils. -
Script Nautilus renommer des fichiers
Dans l’environnement Linunx/Gnome, il y a une fonction intéressante, ce sont les scripts Nautilus. Ils apparaisent dans le menu du “clic droit” et permettent de réaliser une fonction programmée sur un ou plusieurs fichiers.
Ces scripts sont localisés dans le répetoire~/.gnome2/nautilus-scripts
, certains utilisent l’interface graphique zenity.Ce script a évolué, il faut regarder la nouvelle édition qui garde l’ordre des fichiers
Le script
Renomme_fichier.bash
J’ai créé ce script pour résoudre un problème simple : renommer facilement le nom des photos issuent de mon appareil numérique.
Les fichiers issuent d’un appareil photo numériques ont un nom sous forme d’un numéro. Pour mon Olympus, il est du type
p1010xxx.jpg
ou xxx est le N° de la photos dans la série de prise de vues.
Au bout d’un certain temps, vous vous retrouvez avec plusieurs fichiers portant le même nom et je trouve cela ch..t même si mes photos sont classées par date et évènements.Fonctionnement du script
Le script peut être utilisé via le menu des scripts Nautilus ou en mode commande. Vous devez lui passer en paramètre la liste des fichiers à renommer.
Les étapes du script :
- Controle des paramètres : il faut fournir au moins 1 fichier à renommer. Si ce paramètre est omis, il y a sortie avec un code d’erreur 1
- Nouveau nom du fichier : une fenêtre Zenity permet de saisir la
racine du nouveau nom du fichier. Le nom du fichier sera composé de
la racine fournie suivie d’un numéro.
Si vous souhaitez renommer 10 fichiers avec comme racine de nom bonjour, ils seront renommés en bonjour_1 à bonjour_10 - Controle de la racine du nom : si vous validez la boite de saisie du nouveau nom en laissant une chaine vide, il y a sortie avec le code d’erreur 1. Si vous sélectionnez le bouton Cancel, il y a sortie sans erreur.
- Renommage des fichiers : il s’agit d’une boucle qui renommer les
fichiers en gardant le type original. Un fichier
ancien-nom.jpg
sera donc renommé ennouveau-nom_1.jpg
.
Contenu du
script renomme_fic.bash
:#!/bin/bash # Author : http://www.saintcarre.fr/ # Date : 24/11/2007 #depends: imagemagick, zenity # #version 0.1 #Objet : renomme les fichiers sélectionnés en gardant l'extension # #========================================= # Definition des messages title="Renommage de fichiers JPG" err1="Il faut sélectionner un ou plusieurs fichiers." chaine="Les fichiers seront renommés avec la racine spécifiée suivi d'un N° de 1 à $NbFic." entree="Nouvau nom" err2="Vous n'avez pas saisi de nom de fichier." msg_renomm="Renammage en cours ..." #========================================= curdir=`pwd` #test if a file has been selected if [ $# -eq 0 ]; then zenity --error --title="Error" --text="$err1" exit 1 fi #Choix du nouveau nom des fichiers NouvNom=`zenity --entry --title "$title" --text "$chaine" --entry-text "$entree" ` #if $? != 0, user click on cancel button, so exit if [ "$?" != 0 ] ; then exit fi #Verification du nom du fichier if [ ! "$NouvNom" ]; then zenity --error --title="$title" --text="$err2" exit 1 fi nbfiles=$# #========================================= #echo "Renommage des fcihiers, nombre de fichiers a traiter : $#" num=1 (while [ $# -gt 0 ]; do type=`echo $1 | cut -f2 -d"."` let "compteur += 1" num=$(($num+1)) #echo "Renomage de $1 en $NouvNom-$num.$type" mv $1 $NouvNom-$num.$type let "progress = compteur*100/nbfiles" echo $progress shift done ) | zenity --progress --auto-close --title="$title" --text="$msg_renomm" --percentage=0 exit
Installation du script
Vous devez créer un fichier dans le répertoire
~/.gnome2/nautilus-scripts
et l’ouvrir avec votre éditeur préféré (vi, nano, emacs …). Copier le contenu du script fournit au dessus dans le fichier et sauvegarder ce fichier.Pour que ce fichier soit exécutable, il faut modifier les droits :
- ouvrez un terminal
- allez dans le répertoire du script
cd ~/.gnome2/nautilus-scripts
- modifiez les droits sur fichier
chmod 744 renomme_fic.bash
pour qu’il soit exécutable par son propriétaire et lisible par tous,chmod 766 renomme_fic.bash
pour qu’il soit exécutable et lisible par tous.
A faire
Ce script n’est pas parfait, voici quelques idées :
- choisir le N° du premier fichier renommé
- renommer les fichiers dans les sous répertoires
subscribe via RSS