Boucle pour suppression d'une partie du nom de fichier

Résolu
dr-mraycha Messages postés 10 Statut Membre -  
dr-mraycha Messages postés 10 Statut Membre -
bonjour mesdames et messieurs les amateurs des systèmes UNIX. j'ai besoin d'un petit coup de main s'il vous plaît, même si le problème peut paraître banal mais ça me casse vraiment la tête.
voilà depuis un moment je veux renommer des fichiers musicaux qui commencent par des numéro, par exemple : << 02. Can't Remember to Forget You (feat. Rihanna).mp3 >> en utilisant une boucle << for >> mais je n'arrive pas sachant que j'ai utilisé plusieurs méthodes et les commandes cp et mv. je vous passe le code que j'ai pu créer jusqu'à maintenant :

#!/bin/bash

  nbligne='ls -l [0-9][0-9].* |wc -l'

  for i in 'seq 1 $nbligne'; do

    titre='head -n $i fichier | tail -1';

    if [ $i -le 9 ]
    then

      x='ls 0$i.*|cut -c -4';
      echo $x;
      echo $titre vers ${titre#$x};
      cp "'$titre'" "'${titre#$x}'";

    else 
      x='ls $i.*|cut -c -4'
      echo $x
      echo $titre vers ${titre#$x};
      cp "'$titre'" "'${titre#$x}'";
    fi
  done


le message d'erreurs c'est ça :
cp: impossible d'évaluer «'02. Can't Remember to Forget You (feat. Rihanna).mp3'»: Aucun fichier ou dossier de ce type.
merci d'avance de votre aide

3 réponses

  1. Utilisateur anonyme
     
    salut,

    déjà, n'utilise pas
    ls
    pour autre chose qu'afficher les fichiers, sinon c'est pénible d'en extraire des données exploitables. :(
    de plus, c'est le shell qui effectue le développement de
    [0-9][0-9].*
    , donc :
    for f in [0-9][0-9].*
    do
    echo cp "$f" "${f#*. }" # si ça affiche ce que tu veux, enlève le 'echo'
    done
    fini !

    mais, utiliser
    rename
    ne serait-il pas plus pratique ?
    0
    1. dr-mraycha Messages postés 10 Statut Membre
       
      merci Q pour tes explications mais le problème et toujours le même. le message d'erreur est :
      mv: la cible «La).mp3» n'est pas un répertoire
      mv: la cible «Rihanna).mp3» n'est pas un répertoire
      mv: la cible «Empire.mp3» n'est pas un répertoire
      mv: la cible «Me.mp3» n'est pas un répertoire
      mv: la cible «MAGIC!).mp3» n'est pas un répertoire
      mv: la cible «Spotlight.mp3» n'est pas un répertoire
      mv: la cible «Record.mp3» n'est pas un répertoire
      mv: la cible «Shelton).mp3» n'est pas un répertoire
      mv: la cible «23.mp3» n'est pas un répertoire
      mv: la cible «Thing.mp3» n'est pas un répertoire
      mv: la cible «olvidarte.mp3» n'est pas un répertoire
      mv: la cible «ti.mp3» n'est pas un répertoire
      mv: la cible «La.mp3» n'est pas un répertoire
      mv: la cible «Shadows.mp3» n'est pas un répertoire
      0
    2. Utilisateur anonyme
       
      affiche le code que tu utilises.
      0
    3. dr-mraycha Messages postés 10 Statut Membre
       
      le même que tu m'as proposé. ça marche avec "echo" j'ai le nom qui s'affiche sans le numero mais quand j'enlève "echo" pour renommer les fichiers il me sort le message d'erreur que j'ai écrit au dessus.
      0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    montre un exemple, le nom avant, le nom après
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 502
       
      Salut,

      Un exemple est donné dans le post initial :
      exemple : << 02. Can't Remember to Forget You (feat. Rihanna).mp3 >> 

      La syntaxe donnée par qcqcpQ devrait fonctionner (et fonctionne d'ailleurs).
      C'est sûrement une erreur ailleurs dans le script de notre ami ;-\

      La remarque faite par qcqcpQ concernant la commande
      rename
      est d'autant plus pertinente que c'est la meilleur façon de procéder ;-)
      0
    2. dr-mraycha Messages postés 10 Statut Membre
       
      essayez de créer plusieurs fichiers texte par exemple et renommer les 01.fichier.txt 02.fichier.txt 03.fichier.txt et essayer le code précèdent et si ça marche pour vous je crois que je devrais installer un autre système ou bien tout simplement me pendre :D rename est une commande du DOS et quand je la mets au lieu de mv ou de cp dans le script c'est b beaucoup plus compliqué.
      une partie du resultat avec rename: (j'ai rajouté echo $f au script pour m'assurer que f reçoit le nom du fichier et pas autre chose )

      01. Dare (La La La).mp3
      syntax error at (eval 1) line 1, at EOF
      02. Can't Remember to Forget You (feat. Rihanna).mp3
      syntax error at (eval 1) line 1, at EOF
      03. Empire.mp3
      syntax error at (eval 1) line 1, at EOF
      04. You Don't Care About Me.mp3
      syntax error at (eval 1) line 1, at EOF
      05. Cut Me Deep (feat. MAGIC!).mp3
      syntax error at (eval 1) line 1, at EOF
      06. Spotlight.mp3
      syntax error at (eval 1) line 1, at EOF
      07. Broken Record.mp3
      syntax error at (eval 1) line 1, at EOF
      08. Medicine (feat. Blake Shelton).mp3
      Illegal octal digit '8' at (eval 1) line 1, at end of line
      0
    3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 502
       
      $ ls -1
      01. Dare (La La La).mp3
      02. Can't Remember to Forget You (feat. Rihanna).mp3
      03. Empire.mp3
      04. You Don't Care About Me.mp3
      05. Cut Me Deep (feat. MAGIC!).mp3
      06. Spotlight.mp3
      07. Broken Record.mp3
      08. Medicine (feat. Blake Shelton).mp3

      $ rename 's/^[0-9][0-9]*\. *//' *

      $ ls -1
      Broken Record.mp3
      Can't Remember to Forget You (feat. Rihanna).mp3
      Cut Me Deep (feat. MAGIC!).mp3
      Dare (La La La).mp3
      Empire.mp3
      Medicine (feat. Blake Shelton).mp3
      Spotlight.mp3
      You Don't Care About Me.mp3
      0
    4. dr-mraycha Messages postés 10 Statut Membre
       
      désolé zipe et merci de votre aide mais ça n'a pas marché encore une fois. je crois qu'il y a une mise à jour à faire ou quoi que ce soit

      Commande Ms-Dos éxécutée, équivalence linux mv
      mv: la cible «08. Medicine (feat. Blake Shelton).mp3» n'est pas un répertoire
      0
    5. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      mettre les noms entre ""
      0
  3. dr-mraycha Messages postés 10 Statut Membre
     
    j'ai de bonnes nouvelles par rapport à ce problème :D et bien par coïncidence j'ai installé l'environnement xfce et j'ai fait un upgrade de tout le système et d'un coup je me balader dans le menu et j'ai trouver un outil nommé "renommer fichiers en masse" (son vrai nom c'est Thunar) qui s'est avéré très utile :D merci à dubcek, zipe et Q pour votre aide.
    voici le lien pour l'avoir https://www.xfce.org/
    0