0
votes

Batch Renommer plusieurs fichiers de différents chemins

J'ai un répertoire de fichiers musique / artiste / {random_name} / {aléatoire_music} .ogg code>

Il y a beaucoup de dossier dans {nom_am_} code> et différent type de la musique Titre {aléatoire_music} code>. p>

donc, je voulais renommer le {aléatoire> {aléatoire> {random_music} .ogg code> à music.ogg code >. Chaque dossier {nom_name} code> n'a qu'un fichier .ogg. p>

J'ai essayé avec les scripts Bash pendant des heures mais n'a pas réussi à le savoir. P>

for f in ../music/artist/*/*.ogg
do
  echo mv  "$f" "${f/.*.ogg/music.ogg}"
done


0 commentaires

5 Réponses :


1
votes

Votre remplacement de modèle est incorrect. Parce que tous vos chemins commencent par .. , . *. OGG correspond à tout le chemin , donc chaque fichier se fait transformer en music.ogg dans votre répertoire actuel.

vous voulez $ {f / \ / *. ogg / music.ogg} ou mieux encore, $ {F% / *} / musique.ogg . C'est l'équivalent difficile de "$ (Dirname" $ ​​f ")" / musique.ogg .


3 commentaires

Je l'ai remplacé et travaille dans la console d'écho. Mais après la suppression, obtenez Utilisation: MV [-F | -Je | -N] [-v] Cible Source MV [-f | -Je | -N] [-V] Source ... Annuaire


Avez-vous peut-être oublié de doubler les expansions variables? Cela vous met en difficulté si vos noms de chemin contiennent des espaces.


Oui, je viens de l'essayer et ça marche maintenant. Merci beaucoup! été passé une journée entière pour cela



0
votes

J'utilise généralement ceci: xxx


0 commentaires

0
votes

Vous pouvez modifier votre code comme celui-ci xxx

ici dirname extraire le nom du répertoire de votre variable et vous pouvez l'ajouter avec votre musique. ogg pour obtenir le résultat souhaité.

pour l'exemple chemin que vous avez fourni

si $ f est égal à musique / artiste / arai / blue.ogg , alors le résultat sera

MV Music / Artiste / Arai / Blue.ogg Musique / Artiste / ARAI / MUSIC.OGG


2 commentaires

Fonctionne très bien lorsque echo , mais après le supprimer, obtenez Utilisation: MV [-F | -Je | -N] [-v] Cible Source MV [-f | -Je | -N] [-V] Source ... Annuaire


Je pense que votre chemin contient des espaces. Vous pouvez double citer les variables comme "$ f" pour le contourner.



0
votes

J'espère que cela vous aiderait:

précédemment: xxx

code source: xxx

après exécution : xxx

Comme vous pouvez le constater que tous les fichiers ont été renommés correctement.


0 commentaires

0
votes
find ../music/artist/ -type f -name "*.ogg" -exec bash -c 'mydir=`dirname {}`;mv {} $mydir/music.ogg' \;
This is a one-liner that should work.  It implements the exec option of the find command which then gets the directory name and renames the original file to music.ogg.

0 commentaires