IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

BASH: copie de fichiers en fonction d'un motif en récursif, et avec écrasement


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 25
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  2. #2
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 25
    Par défaut
    J'ai essayé avec ça pour faire plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . * - name "*php_blabla2" | awk '{FS = "_blabla2"} ; {mv -f $0 $1} ;'
    ... mais ce n'est toujours pas mieux pour l'instant

  3. #3
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    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 : 5 196
    Par défaut
    je taperais une commande du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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é)

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Ou comme ça aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    find . -type f -name "*php_blabla2" -exec bash -c '
    name="$(basename $1)";dir="$(dirname $1)";                            
    mv -vf ${1} ${dir}/${name/_*/}' _ {} \;

  5. #5
    Membre averti
    Inscrit en
    Décembre 2007
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 25
    Par défaut
    Merci à tous les 2 pour vos réponses rapides !
    Le premier script fonctionne parfaitement !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 03/11/2013, 15h17
  2. Réponses: 10
    Dernier message: 17/11/2011, 16h37
  3. Script shell copie fichier en fonction de leur nom
    Par Borowsky dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 09/12/2009, 09h27
  4. Réponses: 9
    Dernier message: 02/09/2008, 13h52
  5. Réponses: 7
    Dernier message: 16/08/2006, 10h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo