Une fois les fichiers transférés sur mon laptop Linux, je n'ai eu qu'à utiliser la commande rename pour remplacer par des tirets tous les espaces contenus dans les fichiers. Mais avant de procéder à des remplacements en lot et risquer une gaffe, mieux vaut utiliser l'option -n pour avoir une prévisualisation des changements qui seront appliqués.
rename -n 's/ /-/g' *.jpg
image petit format.jpg renamed as image-petit-format.jpg
Après le dernier /, le "g" signifie global, pour remplacer tous les espaces et pas seulement le premier trouvé.
Une fois certain du remplacement dans la liste des fichiers, on peut appliquer le changement :
rename 's/ /-/g' .jpg
rename 's/ /-/g' .pdf
Morale de l'histoire : c'est pratique avoir un ami qui travaille dans les Interwebs.
bash# sed -i ’s/[texte_recherché]/[texte_de_remplacement]/’ monfichier.txt
Pour l’exercice nous allons dire que monfichier.txt comporte une liste d’anciennes adresses email @wanadoo.fr et que nous désirons les mettre à jour en @orange.fr .
bash# cat monfichier.txt
toto@wanadoo.fr
toto@wanadoo.fr
toto@wanadoo.fr
etc.
Donc dans ce cas, cela nous donnera :
bash# sed -i ’s/wanadoo/orange/g’ monfichier.txt
Voilà en détail l’explication :
On passe à la commande sed le paramètre “-i” pour l’édition du fichier monfichier.txt
Le paramètre “-s” (substituer) qui définit l’action de rechercher / remplacer,
l’expression régulière (REGEX),
puis le ‘g’ (action global) à la suite pour la modification de toutes les instances de la chaîne de caractères remplacer dans le fichier.
Dans le cas où on voudrait ne remplacer que la première qui aurait été trouvée, il faudra modifier comme suit : ‘s/texte1/texte2/’
Bon, cela fonctionne sur un fichier, maintenant dans le cas de plusieurs fichiers, voici la commande ‘find’ qui va compléter l’astuce.
bash# find . -maxdepth 1 -name “*.txt” -type f -exec sed -i ’s/wanadoo/orange/g’ {} \
En détail cela nous donne:
Nous utilisons la commande ‘find’ pour récupérer la liste des fichiers ‘.txt’ à traiter,
dans le dossier courant ‘.’ et de ne pas aller plus bas ‘-maxdepth 1′,
puis donc de lister les fichiers dont le nom finit par “*.txt” : ‘-name “*.txt” -type f’.
on utilise alors l’option ‘-exec’ pour dire à ‘find’ d’utiliser la commande qui suit sur les fichiers trouvés.
Et voilà, simple non ?
Comment logger toutes les commandes tappées par tous les utilisateurs sur linux
Site avec bon TD linux bash
Des tutoriaux debian en anglais
un article pour se décider dans quel timezone configurer ses serveurs linux et quelques astuces si on choisit le format UTC