Bash's Incantations
Quite usefull but no explanations… RTFM ;o)
- Remplacer tous les espaces dans tous les
fichiers du répertoire courant par des _ :
for i in *; do mv "$i" $(echo $i | tr " " "_"); done
- Mettre les noms de fichiers en minuscules :
for i in *; do mv "$i" $(echo $i | tr [:upper:] [:lower:]) done
- Changer les extensions EXT1 de tous les fichiers d'un réperoire
en EXT2
for i in *.EXT1; do mv $i $(basename $i EXT1)EXT2; done
- Remplacer une expression régulière
dans tous les fichiers
.cpp du répertoire courant par
une autre. Pour faire simple on va remplacer tous les "windows" par des
"linux".
perl -i.bak -pe 's/windows/linux/g *.cpp
- Couper un gros fichiers en petits morceaux (exemple
avec la taille d'une disquette)
split -b 1457664 mon_gros_fichier mon_gros_fichier_part
et on recolle avec
cat mon_gros_fichier_part.* > mon_gros_fichier
- Rediriger les messages d'erreurs vers la sortie standard
(utile pour rediriger vers less des messages d'erreurs trop longs):
commande 2>&1
- Ne pas afficher les
messages d'erreur :
commande 2>/dev/null
- Renommer tous les fichiers de la forme *tmp* par *toto* (un des
rares trucs plus facile à faire sous ms-dos ):
for i in *; do mv $i $(echo $i | sed -e"s/tmp/toto/g"); done
- Pour supprimer les 10 premières lignes de
tous les fichiers dans le répertoire courant :
for i in *; do sed "1,10d" $i > new$i; done
- Si vous
faites un
cat sur un fichier binaire, vous risquez de
corrompre votre affichage pour rééinitialiser le terminal, il suffit
de taper reset.
- Vous avez un fichier data.csv
contenant des valeurs séparées par des points virgules (;) et vous
souhaiter additionner les valeurs contenues dans les colonnes 3 et 4.
cat data.csv | awk -F \; '{print $3+$4}'
- Vous avez deux fichiers a.csv et b.cvs (avec tabulation comme délimiteur de
champ) et vous souhaitez les fusionner en un seul (Ajouter les colonnes de b à
la suite de celles de a)… utilisable aussi avec les pipes :
paste a.csv b.csv
- Dans les boucles
for les noms de fichier contenant des espaces peuvent être problématiques. Vous pouvez changer la valeur de IFS ou bien utiliser une commande avec find
find . -type f -print | while read i; do touch "${i}"; done
- Pour effacer les fichiers créés il y a plus de 45 jours (pour faire du vide dans des sauvegardes par exemple) :
find backupWWW/* -mtime +45 -exec rm {} \;
- Redimensionner une liste d'images et le mettre dans le sous répertoire
small(on peut aussi utiliser scale au lieu de geometry) :
for i in *.jpg; do convert -geometry 800x600 "$i" "small/$i"
- Optimiser une image png pour le web (attention indexation des couleurs)
convert -quality 0 -colors 256 +dither orig.png optimise.png
- Concaténer des fichiers
.avi en un seul "gros" fichier (l'encodage doit être le même)
mencoder -oac copy -ovc copy -o nom_fichier_final.avi fichiers_entree*.avi