J'ai un répertoire de fichiers Il y a beaucoup de dossier dans donc, je voulais renommer le J'ai essayé avec les scripts Bash pendant des heures mais n'a pas réussi à le savoir. P> musique / artiste / {random_name} / {aléatoire_music} .ogg code>
{nom_am_} code> et différent type de la musique Titre
{aléatoire_music} code>. p>
{aléatoire> {aléatoire> {random_music} .ogg code> à
music.ogg code >. Chaque dossier
{nom_name} code> n'a qu'un fichier .ogg. p>
for f in ../music/artist/*/*.ogg
do
echo mv "$f" "${f/.*.ogg/music.ogg}"
done
5 Réponses :
Votre remplacement de modèle est incorrect. Parce que tous vos chemins commencent par vous voulez .. code>,
. *. OGG code> correspond à tout le chemin em>, donc chaque fichier em> se fait transformer en
music.ogg code> dans votre répertoire actuel. p>
$ {f / \ / *. ogg / music.ogg} code> ou mieux encore,
$ {F% / *} / musique.ogg code> . C'est l'équivalent difficile de
"$ (Dirname" $ f ")" / musique.ogg code>. P>
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 Code>
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
J'utilise généralement ceci:
Vous pouvez modifier votre code comme celui-ci ici pour l'exemple chemin que vous avez fourni P> si dirname code> extraire le nom du répertoire de votre variable et vous pouvez l'ajouter avec votre
musique. ogg code> pour obtenir le résultat souhaité. p>
$ f code> est égal à
musique / artiste / arai / blue.ogg code>, alors le résultat sera p>
MV Music / Artiste / Arai / Blue.ogg Musique / Artiste / ARAI / MUSIC.OGG CODE> p> p>
Fonctionne très bien lorsque echo code>, mais après le supprimer, obtenez
Utilisation: MV [-F | -Je | -N] [-v] Cible Source MV [-f | -Je | -N] [-V] Source ... Annuaire Code>
Je pense que votre chemin contient des espaces. Vous pouvez double citer les variables comme "$ f" pour le contourner.
J'espère que cela vous aiderait:
précédemment: p> code source: p> après exécution : p> Comme vous pouvez le constater que tous les fichiers ont été renommés correctement. p> p>
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.