Renommer une partie d’un nom de fichier

J’ai des tas de fichiers qui ressemblent à ceci:

DET01-ABC-5_50-001.dat ... DET01-ABC-5_50-0025.dat 

et je veux qu’ils ressemblent à ceci:

 DET01-XYZ-5_50-001.dat ... DET01-XYZ-5_50-0025.dat 

Comment puis-je faire ceci?

    Il existe plusieurs variantes d’une commande de renommage, dans votre cas, elle peut être aussi simple que

     rename ABC XYZ *.dat 

    Vous pouvez avoir une version qui prend une regex Perl;

     rename 's/ABC/XYZ/' *.dat 
     for file in *.dat ; do mv $file ${file//ABC/XYZ} ; done 

    Aucun rename ou sed requirejs. Juste l’ extension du paramètre bash.

    Quelque chose comme ça le fera. La boucle for doit être modifiée en fonction des noms de fichiers que vous souhaitez capturer.

     for fspec1 in DET01-ABC-5_50-*.dat ; do fspec2=$(echo ${fspec1} | sed 's/-ABC-/-XYZ-/') mv ${fspec1} ${fspec2} done 

    Vous devriez toujours tester ces scripts sur des copies de vos données, en passant, et dans des répertoires totalement différents.

    Vous devez apprendre à utiliser sed http://unixhelp.ed.ac.uk/CGI/man-cgi?sed

    Et aussi à utiliser pour que vous puissiez parcourir vos entrées de fichiers http://www.cyberciti.biz/faq/bash-for-loop/

    Votre commande ressemblera à quelque chose comme ça, je n’ai pas de mandat à côté de moi donc je ne peux pas vérifier

     for i in `dir` do mv $i `echo $i | sed '/orig/new/g'` 

    J’aime faire ça avec sed. Dans votre cas:

     for x in DET01-*.dat; do echo $x | sed -r 's/DET01-ABC-(.+)\.dat/mv -v "\0" "DET01-XYZ-\1.dat"/' done | sh -e 

    Il est préférable d’omettre la partie “sh-e” en premier pour voir ce qui sera exécuté.

    Toutes ces réponses sont simples et bonnes. Cependant, j’aime toujours append un mode interactif à ces scripts pour pouvoir trouver des faux positifs.

    if [[-n $ inInteractiveMode]]
    puis
    echo -e -n “$ oldFileName => $ newFileName \ nVoulez-vous effectuer cette modification? [Y / n]:”
    lire le run

    [[-z $ run || “$ run” == “y” || “$ run” == “Y”]] && mv “$ oldFileName” “$ newFileName”
    Fi

    Ou faites le mode interactif par défaut et ajoutez un indicateur de force (-f | –force) pour les scripts automatisés ou si vous vous sentez audacieux. Et cela ne vous ralentit pas trop: la réponse par défaut est “oui, je veux renommer” donc vous pouvez simplement appuyer sur la touche Entrée à chaque invite (à cause du “ -z $ run \ test.