Skip to Content

Snippets Bash

Une collection de scripts shell et one-liners pour gagner du temps au quotidien.

Tous ces scripts sont testĂ©s. Mais fais quand mĂȘme attention quand tu manipules des fichiers importants — un rm -rf mal placĂ© peut faire mal !

📁 Manipulation de fichiers

Renommer des fichiers en masse

#!/bin/bash # Renommer tous les fichiers .txt en .md for file in *.txt; do mv "$file" "\${file%.txt}.md" done # Alternative avec rename (plus puissant) rename 's/\.txt$/.md/' *.txt

Trouver et supprimer des fichiers

# Trouver et supprimer les fichiers .log de plus de 30 jours find /var/log -name "*.log" -mtime +30 -delete # Trouver les fichiers volumineux (>100MB) find . -type f -size +100M -exec ls -lh {} \; # Supprimer les dossiers vides find . -type d -empty -delete

Remplacer du texte dans plusieurs fichiers

# Remplacer "ancienne_version" par "nouvelle_version" dans tous les .js find . -name "*.js" -exec sed -i 's/ancienne_version/nouvelle_version/g' {} \; # Avec grep pour voir les fichiers modifiés d'abord grep -r "ancienne_version" . --include="*.js" find . -name "*.js" -exec sed -i 's/ancienne_version/nouvelle_version/g' {} \;

🔁 Boucles et conditions

Boucle sur des fichiers avec traitement

#!/bin/bash # Redimensionner toutes les images d'un dossier for image in *.jpg; do if [ -f "$image" ]; then echo "Traitement de $image..." convert "$image" -resize 800x600 "resized_$image" fi done # Boucle avec compteur for i in {1..10}; do echo "Étape $i/10" sleep 1 done

Conditions avancées

#!/bin/bash # VĂ©rifier si un service tourne if systemctl is-active --quiet nginx; then echo "Nginx est en cours d'exĂ©cution" else echo "Nginx est arrĂȘtĂ©" fi # VĂ©rifier l'espace disque USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//') if [ $USAGE -gt 80 ]; then echo "⚠ Espace disque critique: ${USAGE}%" else echo "✅ Espace disque OK: ${USAGE}%" fi

📝 Traitement de texte

Grep patterns avancés

# Chercher dans des fichiers spécifiques grep -r "function" . --include="*.js" --include="*.ts" # Exclure des dossiers grep -r "TODO" . --exclude-dir=node_modules --exclude-dir=.git # Compter les occurrences grep -c "error" *.log # Contexte autour des résultats grep -C 3 "exception" app.log # Regex complexe: emails grep -E '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' contacts.txt

Sed pour modifications rapides

# Supprimer les lignes vides sed '/^$/d' file.txt # Ajouter un préfixe à chaque ligne sed 's/^/prefixe_/' file.txt # Extraire des IPs d'un log sed -n 's/.*\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\).*/\1/p' access.log # Remplacer la n-iÚme occurrence sed 's/error/ERREUR/3g' file.txt

Awk pour traitement de données

# Extraire la 2Ăšme colonne awk '{print $2}' data.txt # Calculer la somme d'une colonne awk '{sum += $3} END {print "Total:", sum}' numbers.txt # Filtrer avec condition awk '$1 > 100 {print $1, $2}' data.txt # Compter les occurrences uniques awk '{count[$1]++} END {for (word in count) print word, count[word]}' words.txt

đŸ–„ïž SystĂšme et monitoring

Monitoring des ressources

#!/bin/bash # Script de monitoring simple echo "=== SystÚme Status ===" echo "CPU: $(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)" echo "Mémoire: $(free -h | awk 'NR==2{printf "%.1f%%", $3*100/$2}')" echo "Disk: $(df -h / | awk 'NR==2 {print $5}')" # Top 5 processus par CPU echo -e "\n=== Top CPU ===" ps aux --sort=-%cpu | head -6 # Top 5 processus par mémoire echo -e "\n=== Top Memory ===" ps aux --sort=-%mem | head -6

Script de cleanup automatique

#!/bin/bash # Cleanup automatique du systÚme LOG_FILE="/var/log/cleanup.log" echo "[$(date)] Début du cleanup" >> $LOG_FILE # Vider les logs anciens find /var/log -name "*.log" -mtime +7 -exec truncate -s 0 {} \; echo "Logs nettoyés" >> $LOG_FILE # Vider le cache apt apt-get clean echo "Cache apt nettoyé" >> $LOG_FILE # Supprimer les fichiers temporaires find /tmp -type f -atime +7 -delete echo "Fichiers temporaires supprimés" >> $LOG_FILE echo "[$(date)] Cleanup terminé" >> $LOG_FILE

🌐 Network et tĂ©lĂ©chargement

Curl patterns utiles

# Télécharger avec barre de progression curl -# -O https://example.com/large-file.zip # Tester les temps de réponse curl -w "@curl-format.txt" -o /dev/null -s https://example.com # Upload de fichier curl -X POST -F "file=@document.pdf" https://api.example.com/upload # Headers personnalisés curl -H "Authorization: Bearer TOKEN" https://api.example.com/data # Vérifier le statut HTTP curl -s -o /dev/null -w "%{http_code}" https://example.com

Script de téléchargement en masse

#!/bin/bash # TĂ©lĂ©charger une liste d'URLs URLS_FILE="urls.txt" OUTPUT_DIR="downloads" mkdir -p $OUTPUT_DIR while IFS= read -r url; do if [[ ! -z "$url" && ! "$url" =~ ^# ]]; then filename=$(basename "$url") echo "TĂ©lĂ©chargement de $filename..." curl -L -o "$OUTPUT_DIR/$filename" "$url" if [ $? -eq 0 ]; then echo "✅ $filename tĂ©lĂ©chargĂ©" else echo "❌ Erreur pour $filename" fi fi done < "$URLS_FILE"

đŸ’Ÿ Scripts de backup

Backup incrémental

#!/bin/bash # Backup incrémental avec rsync SOURCE="/home/user/documents" DEST="/backup/documents" DATE=$(date +%Y-%m-%d_%H-%M-%S) # Créer le dossier de destination mkdir -p "$DEST/$DATE" # Rsync avec options de sauvegarde rsync -av --delete \ --link-dest="$DEST/latest" \ "$SOURCE/" "$DEST/$DATE/" # Mettre à jour le lien "latest" rm -f "$DEST/latest" ln -s "$DEST/$DATE" "$DEST/latest" echo "Backup terminé: $DEST/$DATE"

Backup base de données

#!/bin/bash # Backup MySQL automatique DB_NAME="myapp" DB_USER="backup_user" DB_PASS="secure_password" BACKUP_DIR="/backups/mysql" DATE=$(date +%Y%m%d_%H%M%S) mkdir -p $BACKUP_DIR # Backup de la base mysqldump -u $DB_USER -p$DB_PASS $DB_NAME | gzip > "$BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz" # Garder seulement les 7 derniers jours find $BACKUP_DIR -name "${DB_NAME}_*.sql.gz" -mtime +7 -delete echo "Backup DB terminé: ${DB_NAME}_${DATE}.sql.gz"

⚡ One-liners puissants

One-liners du quotidien

# Compter les lignes de code dans un projet find . -name "*.py" -o -name "*.js" | xargs wc -l | tail -1 # Trouver les 10 plus gros fichiers find . -type f -exec du -h {} + | sort -rh | head -10 # Générer un mot de passe aléatoire openssl rand -base64 32 # Extraire les URLs d'un fichier grep -oE 'https?://[^"]+' file.html # Monitorer les modifications en temps réel watch -n 1 'ls -la' # Calculer la taille d'un dossier du -sh /path/to/directory # Trouver les ports ouverts netstat -tuln | grep LISTEN # Convertir des images en masse for i in *.png; do convert "$i" "${i%.png}.jpg"; done # Extraire une archive tar.gz tar -xzf archive.tar.gz # Créer une archive tar.gz tar -czf backup.tar.gz /path/to/backup

Ces snippets sont Ă©volutifs ! Si tu as des scripts qui te sauvent la vie au quotidien, n’hĂ©site pas Ă  les ajouter.