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
Aller à la navigation
Aller à la recherche
🔧 HOWTO — Rechercher et remplacer une occurrence dans des fichiers .sh
[modifier | modifier le wikicode]
🧭 Objectif
[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/" .
Explications
[modifier | modifier le wikicode]-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
Détails
[modifier | modifier le wikicode]-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' {} +
Explication
[modifier | modifier le wikicode]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 commandesedà 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
Détails
[modifier | modifier le wikicode]:args **/*.sh→ charge tous les fichiers.sh(récursif siset 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
grepavant tout remplacement pour vérifier les fichiers affectés.
Et pense à faire une sauvegarde (
cp -r dossier dossier_backup) avant les remplacements massifs !