2 votes

Comment utiliser sed, perl pour renommer les fichiers et leur contenu avec un motif particulier dans un répertoire donné ?

Étant donné un répertoire "Centos1" qui a quelques fichiers nommés Centos1.x, Centos1.y, Centos1.z et ces fichiers ont également "Centos1" dans leur contenu. En utilisant une seule commande (en utilisant find, sed, perl -pie), comment puis-je les faire renommer en "Centos2" pour toutes les occurrences de "Centos1" ? Voici le contenu du répertoire Centos1.

Centos1.nvram      Centos1-s005.vmdk  Centos1.vmsd  vmware-2.log
Centos1-s001.vmdk  Centos1-s006.vmdk  Centos1.vmx   vmware.log
Centos1-s002.vmdk  Centos1-s007.vmdk  Centos1.vmxf
Centos1-s003.vmdk  Centos1-s008.vmdk  vmware-0.log
Centos1-s004.vmdk  Centos1.vmdk       vmware-1.log

NOTE : Je veux que "Centos1" soit remplacé par "Centos2" dans tous les fichiers également s'il est présent.

J'ai exécuté la commande ci-dessous après avoir changé le répertoire "Centos1".

find . -type f -exec sed -i 's/Centos1/Centos2/g' {} +

Mais cela n'a pas aidé. Des suggestions ?

1voto

user9517 Points 113163

Vous pouvez utiliser la commande rename pour effectuer le renommage.

rename Centos1 Centos2 *

ou si vous avez le renommage perl

rename 's/Centos1/Centos2' *

Votre commande find devrait changer toutes les occurrences de Centos1 en Centos2, vous pourriez donc les envelopper dans un simple script pour en faire une seule commande.

#!/bin/bash
rename Centos1 Centos2 *

find . -type f -exec sed -i 's/Centos1/Centos2/g' {} +

0voto

at8eqeq3 Points 711

Votre réponse doit-elle vraiment inclure uniquement ces commandes, ou pouvez-vous utiliser les buildins bash et le globbing de fichiers ?

for file in Centos1*; do
  sed -i 's/Centos1/Centos2/g' "$file"
  mv "$file" "$(echo "$file" | sed 's/^Centos1/Centos2/')"
done

Edita: En utilisant juste find/sed, et en renommant les fichiers à l'intérieur de ceux-ci

find ./ -type f -name Centos1* -exec sh -c 'sed -i "s/Centos1/Centos2/g" "$1"; mv "$1" "$(echo "$1" | sed "s/Centos1/Centos2/")"' X '{}' \;

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X