[Memo] BASH SHELL - se moquer des espaces blancs dans un for

13 Janvier 2010 20:14 | Par Miss Lemon dans Linux

 , , , , , ,

Dans les variables internes des scripts BASH on connaissait:
  • $HOME - le répertoire personnel de l'utilisateur
  • $BASH - le chemin vers le binaire Bash
  • $GROUPS - les groupes auxquels appartient l'utilisateur
  • ...

Je vous présente $IFS.
$IFS détermine la façon dont Bash reconnaît les champs ou les limites de mots lorsqu'il interprète des chaînes de caractères. La valeur par défaut est un espace blanc (espace, tabulation et retour chariot) mais peut être changé, par exemple, pour analyser un fichier de données séparées par des virgules.

Cette variable peut être utile lorsque vous souhaitez traiter un fichier ligne par ligne, et que ces même lignes comportent des espaces.
Pour des besoins personnels, je souhaitez exécuter un ensemble de commande sur une liste de fichiers récupérés via la commande find à partir d'un for.
Malheureusement pour moi, certains de ces fichiers possédaient des espaces dans leur nom.
$ find . -type f

mon fichier 1.doc
mon fichier 2.pdf

Mon script initial était comme suit:
for i in $(find . -type f)
do
     zip all_files.zip $i
done

(Il était un peu plus compliqué que ça en fait mais je simplifie pour l'exemple ;) )


Malheureusement, les espaces contenus dans les noms empêchaient que la commande s'exécute correctement:
zip warning: name not matched: ./zip all_files.zip mon
zip error: Nothing to do! (all_files.zip)
zip warning: name not matched: ./zip all_files.zip fichier
zip error: Nothing to do! (all_files.zip)
zip warning: name not matched: ./zip all_files.zip 1.doc
zip error: Nothing to do! (all_files.zip)
zip warning: name not matched: ./zip all_files.zip mon
zip error: Nothing to do! (all_files.zip)
zip warning: name not matched: ./zip all_files.zip fichier
zip error: Nothing to do! (all_files.zip)
zip warning: name not matched: ./zip all_files.zip 2.pdf
zip error: Nothing to do! (all_files.zip)
Grâce à la variable $IFS, j'ai pu obtenir le résultat que je voulais, avec le script suivant
oldIFS=$IFS     # sauvegarde du séparateur de champ
IFS=$'\n'     # nouveau séparateur de champ, le caractère fin de ligne
for i in $(find . -type f)
do
     zip all_files.zip $i
done
IFS=$old_IFS     # rétablissement du séparateur de champ par défaut
Par défaut $IFS contient l'espace comme séparateur de champs. En lui affectant le caractère de fin de ligne, le bash ne considérera plus que le nom de fichier sera terminé lorsqu'il rencontrera un espace.
Ce qui dans mon cas concret nous donne :
adding: zip all_files.zip mon fichier 1.doc (deflated xx%)
adding: zip all_files.zip mon fichier 2.pdf (deflated xx%)
Et voilà !
MAJ du 15/01/2010:
En partant du fait que iL vaut mieux faire 1 zip de 100 fichiers, plutôt que 100 zip de 1 fichiers, la boucle for est à utiliser avec modération.
Dans certains cas il est donc plus judicieux d'utiliser xargs qui possède une option nous permettant de spécifier le champs séparateur.
find -type f | xargs -d "\n" zip all_files.zip

Merci Nico P. pour cette option qui m'avait échappée

[Memo] Envoyer un mail avec mutt en ligne de commande

21 Octobre 2009 10:41 | Par Miss Lemon dans Linux

 , , ,

invite de commande

Etant donné que je ne me rappelle jamais, voici un petit mémo
mutt -a PIECE_JOINTE -s "SUJET" EMAIL_DESTINATAIRE < FICHER_AVEC_CORPS_DU_MSG

[Memo] Connaitre l'espace disque utilisé sur chacune de vos partitions

21 Octobre 2009 09:54 | Par Miss Lemon dans Linux

 , , ,

invite de commande

df -H | grep -vE '^[a-zA-Z]|tmpfs|cdrom|udev'  | awk '{ print $5 " " $1 }'
Cette commande liste les partitions et ne ressort que la capacité utilisée en pourcentage.

Source: www.crashdump.fr

Se connecter en 3G avec Ubuntu, Orange et un Nokia N95

19 Février 2009 00:08 | Par Miss Lemon dans Linux

 , , , , ,

Nokia N95 - Ubuntu - 3G

Quand on est un peu geek, on aime bien partir en vacances avec son bébé PC sous le bras et la certitude de pouvoir se connecter.
Alors bien sûr, on peut prier auprès du dieu Wifi pour qu'une connexion non sécurisée existe, mais bon, finalement ça arrive rarement.
La dernière fois que je suis partie en vacances, j'ai donc cherché une solution pour me servir de mon Nokia N95 comme modem. C'est prévu de base, seulement voilà, ça ne marche pas en bluetooth, uniquement par infrarouge, et mon bébé PC ne possède pas de capteur infrarouge. De plus, il est sous Ubuntu (oui je sais je cherche :) )
Heureusement, un post sur le blog equinoxefr.org est venu à mon secours.
Comme j’ai un abonnement Orange, cela fonctionne pour moi.
Voici donc la procédure:
Tout d'abord installez wvdial sur votre ordinateur.
sudo apt-get install wvdial
Une fois installé, il faut modifier le fichier de configuration:
vim /etc/wvdial.conf
[Dialer Defaults]
Modem = /dev/ttyACM0
Baud = 460800
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init5 = AT+CGDCONT=1,"IP","orange";
ISDN = 0
Modem Type = Analog Modem
Phone = *99***1#
username = orange
password = orange
Stupid Mode = 1
Une fois celà fait, c'est opérationnel, il n'y a plus qu'à tester.

Il vous faut votre cable USB pour connecter le PC et le téléphone.
Une fois le téléphone branché, vous sélectionnez le mode "PC Suite" sur votre téléphone.
Enfin, dans un terminal, tapez
sudo wvdial
Et voilà! C'est tout.
Et sans surfacturation (Internet Max)

Le plein d'ubuntu avec "Full Circle Magazine"

12 Janvier 2009 14:31 | Par Miss Lemon dans Linux

 , , , ,

FullCircle Magazine

FullCircle Magazine est un magazine online indépendant et gratuit pour les utilisateurs d'Ubuntu.

Le premier numéro est paru en juin 2007. Je ne suis pas sure qu'il y ait réellement une fréquence de parution, mais actuellement, il "fête" la parution du vingtième numéro. Le magazine sort systématiquement en langue anglaise, mais est traduit par la suite en différent langage (dont parfois le français, mais mieux vaut comprendre l'anglais).
Le magazine aborde des sujets divers comme l'environnement de travail, des comparatif de logiciels, les livres à lire, des interviews, des "How To ?", ...
Le tout est edité sous licence Creative Commons.

EquinoxeFR nous donnait un petit script shell pour récupérer certains numéros, le voici un peu modifié pour récupérer TOUS les numéros en VO, en one shot.
mkdir fullcircle ;
cd fullcircle ;
wget http://fullcirclemagazine.org/download/Issue%200%20-%20English.pdf ;
wget http://fullcirclemagazine.org/download/fullcircle-issue01-english.pdf ;
for i in 2 3;
do wget http://fullcirclemagazine.org/download/fullcircle-issue${i}-eng.pdf ;
done ;
for i in `seq 4 20` ;
do wget http://dl.fullcirclemagazine.org/issue${i}_en.pdf ;
done

Vous trouverez ici un index des articles pour les numéros allant de 0 à 17.
Bonne lecture.


Source: EquinoxeFR

Hello ... Im' a Linux !!

22 Décembre 2008 23:24 | Par Miss Lemon dans Linux

 ,

Et oui après "Hello I'm a PC" ou "Hello I'm a Mac" le pingouin s'y met.



Histoire de rester dans l'esprit communautaire, il semblerait que ces vidéos Linux soient réalisées par les utilisateurs eux mêmes, et non pas par des grosses agences de comm, lors d'un futur concours.
En tout cas, dans cette vidéo ci je remercie l'auteur d'avoir représenté Linux par une demoiselle, sans qu'elle ne ressemble au cliché de la geekette. C'est tout con, mais ça fait plaisir.

Source: Mind Overflow
© Miss Lemon 2007 | Graphisme: Merci Dam's pour le coup de main | Plateforme: Dotclear