Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/06/2011, 10h33   #1
Candidat au titre de Membre du Club
 
Inscription : décembre 2007
Messages : 25
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 25
Points : 13
Points : 13
Par défaut BASH: copie de fichiers en fonction d'un motif en récursif, et avec écrasement

Bonjour à tous !

Je suis confronté à un petit problème que j'aurai aimé régler en bash.
Je dois parcourir une partie de l'arborescence d'un serveur de façon récursive à la recherche de fichiers de la forme blabla1.php_blabla2.
Je dois renommer ces fichiers en les mettant sous la forme blabla1.php.
J'étais arrivé à avoir un début de réponse en utilisant "rename", mais j'ai un soucis lorsque ces fichiers se trouvent dans un répertoire contenant déja un fichier nommé blabla1.php. Dans ce cas là, le fichier n'est pas remplacé.

J'ai donc réessayé avec la commande suivante, mais ça ne fonctionne toujours pas. Je ne comprend pas trop pourquoi (ma pratique du bash se limite à 3x en ... 5ans ! )
Code :
find . * - name "*php_blabla2" | awk '{FS = "_blabla2"} ; {rm -f $1} ; {cp $0 $1} ; {rm -f $0}'
Merci d'avance si vous avez une idée ou des fonctions plus appropriées à me conseiller !
Oursdeglace est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/06/2011, 10h57   #2
Candidat au titre de Membre du Club
 
Inscription : décembre 2007
Messages : 25
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 25
Points : 13
Points : 13
J'ai essayé avec ça pour faire plus simple :
Code :
find . * - name "*php_blabla2" | awk '{FS = "_blabla2"} ; {mv -f $0 $1} ;'
... mais ce n'est toujours pas mieux pour l'instant
Oursdeglace est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/06/2011, 11h31   #3
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 534
Points : 7 743
Points : 7 743
je taperais une commande du genre :
Code :
1
2
3
4
5
6
cd /chemin/
for i in $(find . -type f -name "*blabla1.php_blabla2.*") 
do
    mv ${i} $(echo ${i} | sed "s/_babla2.*//")
    if [ $? -ne 0 ] ; then echo "mv ${i} $(echo ${i} | sed \"s/_babla2.*//\") : probleme" ; fi
done | tee /tmp/rename.log
le fichier log c'est juste au cas où si on renomme un fichier qu'on voulait garder pouvoir faire facilement le retour arrière... (parano:activé)
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 24/06/2011, 11h37   #4
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

Ou comme ça aussi :

Code :
1
2
3
find . -type f -name "*php_blabla2" -exec bash -c '
name="$(basename $1)";dir="$(dirname $1)";                            
mv -vf ${1} ${dir}/${name/_*/}' _ {} \;
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 24/06/2011, 11h46   #5
Candidat au titre de Membre du Club
 
Inscription : décembre 2007
Messages : 25
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 25
Points : 13
Points : 13
Merci à tous les 2 pour vos réponses rapides !
Le premier script fonctionne parfaitement !
Oursdeglace est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h45.


 
 
 
 
Partenaires

Hébergement Web