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/' *.txtTrouver 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 -deleteRemplacer 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
doneConditions 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.txtSed 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.txtAwk 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 -6Script 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.comScript 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/backupCes snippets sont Ă©volutifs ! Si tu as des scripts qui te sauvent la vie au quotidien, nâhĂ©site pas Ă les ajouter.