Il y a 389 articles et 19 utilisateurs inscrits (ce bandeau est défini dans MediaWiki:Sitenotice)

Rechercher et remplacer une occurrence dans des fichiers .sh

De AJLSM
Aller à la navigation Aller à la recherche

🔧 HOWTO — Rechercher et remplacer une occurrence dans des fichiers .sh

[modifier | modifier le wikicode]

Trouver toutes les occurrences d’un motif (par exemple /opt/rsync_sync/) dans des fichiers shell (.sh), puis — si nécessaire — les remplacer par un nouveau chemin (/opt/rsync_sync2/).



🔍 1. Rechercher dans tous les fichiers .sh

[modifier | modifier le wikicode]
grep -rn --include="*.sh" "/opt/rsync_sync/" .

  • -r → recherche récursive dans les sous-dossiers
  • -n → affiche le numéro de ligne
  • --include="*.sh" → limite aux fichiers .sh
  • . → répertoire courant

💡 Exemple de sortie :

./backup.sh:12:rsync -av /opt/rsync_sync/ /backup/
./deploy.sh:45:source /opt/rsync_sync/config.sh

✏️ 2. Remplacement dans le dossier courant

[modifier | modifier le wikicode]
sed -i 's|/opt/rsync_sync/|/opt/rsync_sync2/|g' *.sh

  • -i → modifie les fichiers en place
  • s|ancien|nouveau|g → substitution globale (| utilisé comme séparateur pour éviter d’échapper /)
  • *.sh → tous les scripts shell du dossier courant

🔒 Astuce sécurité : teste d’abord sans -i pour prévisualiser :

sed 's|/opt/rsync_sync/|/opt/rsync_sync2/|g' fichier.sh

🌲 3. Remplacement récursif dans tout le répertoire

[modifier | modifier le wikicode]
find . -type f -name "*.sh" -exec sed -i 's|/opt/rsync_sync/|/opt/rsync_sync2/|g' {} +

  • find . → recherche dans le répertoire courant et sous-dossiers
  • -type f → limite aux fichiers
  • -name "*.sh" → filtre sur les scripts shell
  • -exec ... {} + → applique la commande sed à chaque fichier trouvé



💻 4. Variante depuis Vim

[modifier | modifier le wikicode]

Ouvrir Vim et exécuter :

:args **/*.sh
:argdo %s|/opt/rsync_sync/|/opt/rsync_sync2/|ge | update

  • :args **/*.sh → charge tous les fichiers .sh (récursif si set globstar)
  • :argdo → applique la commande à chaque fichier de la liste
  • %s|...|...|ge → remplace dans tout le fichier, ignore les erreurs
  • update → sauvegarde automatiquement les modifications



✅ Résumé rapide

[modifier | modifier le wikicode]
Action Commande
Rechercher récursivement grep -rn --include="*.sh" "/opt/rsync_sync/" .
Remplacer dans le dossier courant /opt/rsync_sync/|/opt/rsync_sync2/|g' *.sh
Remplacer récursivement /opt/rsync_sync/|/opt/rsync_sync2/|g' {} +
Depuis Vim /opt/rsync_sync/|/opt/rsync_sync2/|ge | update



🧠 Conseil : Utilise grep avant tout remplacement pour vérifier les fichiers affectés.

Et pense à faire une sauvegarde (cp -r dossier dossier_backup) avant les remplacements massifs !