Bash Commands

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
    
Design selector