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 -
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 :
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
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 pasls
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].*
fini !
do
echo cp "$f" "${f#*. }" # si ça affiche ce que tu veux, enlève le 'echo'
done
mais, utiliserrename
ne serait-il pas plus pratique ?-
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 -
-
-
-
hello
montre un exemple, le nom avant, le nom après-
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 commanderename
est d'autant plus pertinente que c'est la meilleur façon de procéder ;-) -
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 -
$ 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 -
-
-
-
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/