Boucle pour suppression d'une partie du nom de fichier [Résolu/Fermé]

Signaler
Messages postés
10
Date d'inscription
mardi 3 juin 2014
Statut
Membre
Dernière intervention
7 juin 2014
-
dr-mraycha
Messages postés
10
Date d'inscription
mardi 3 juin 2014
Statut
Membre
Dernière intervention
7 juin 2014
-
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

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 ?
dr-mraycha
Messages postés
10
Date d'inscription
mardi 3 juin 2014
Statut
Membre
Dernière intervention
7 juin 2014

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
Utilisateur anonyme
affiche le code que tu utilises.
dr-mraycha
Messages postés
10
Date d'inscription
mardi 3 juin 2014
Statut
Membre
Dernière intervention
7 juin 2014

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.
Messages postés
18066
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
18 février 2020
4 631
hello
montre un exemple, le nom avant, le nom après
dr-mraycha
Messages postés
10
Date d'inscription
mardi 3 juin 2014
Statut
Membre
Dernière intervention
7 juin 2014

au fait j'ai aussi tenter de remplacer
 rename
par
ls
dans la commande précédente te ça donne ça:

ls 's/^[0-9][0-9]*\. *//' *
ls: impossible d'accéder à s/^[0-9][0-9]*\. *//: Aucun fichier ou dossier de ce type
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

donc il exécute seulement ls *. j'ai enlevé * de la fin de la commande et ça donne:
ls: impossible d'accéder à s/^[0-9][0-9]*\. *//: Aucun fichier ou dossier de ce type
pas mal de ma part toutes ces analyses :)
dubcek
Messages postés
18066
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
18 février 2020
4 631
ce qui suit ls est du shell, ce qui suit rename est du perl
ls [0-9][0-9]*
rename 's/^[0-9][0-9]*\. *//' *
dr-mraycha
Messages postés
10
Date d'inscription
mardi 3 juin 2014
Statut
Membre
Dernière intervention
7 juin 2014

oui j'ai compris mais je ne sais pas pourquoi ça ne marche pas vraiment ça m'énerve :( je l'ai copié coller j'ai tout fait mais ça marche pas je crois que j'ai un gros travail à faire en renommant les fichiers un par un
dubcek
Messages postés
18066
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
18 février 2020
4 631
montre une liste des fichiers et le résultat du rename -n ....
dr-mraycha
Messages postés
10
Date d'inscription
mardi 3 juin 2014
Statut
Membre
Dernière intervention
7 juin 2014

d'accord voilà
ls
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 -n 's/^[0-9][0-9]*\. *//' *
? Commande Ms-Dos éxécutée, équivalence linux mv
mv: la cible «08. Medicine (feat. Blake Shelton).mp3» n'est pas un répertoire

en plus je viens de mettre apt-get upgrade de tout le système en espérant que ça marche parce que j'ai vu Perl se mettre à jour mais ça n'a rien changé
Messages postés
10
Date d'inscription
mardi 3 juin 2014
Statut
Membre
Dernière intervention
7 juin 2014

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 http://thunar.xfce.org/