Je veux essentiellement partir de ceci:
.
├── Alan Walker
│ ├── Different World
│ │ ├── 01 Intro.mp3
│ │ ├── 02 Lost Control.mp3
│ │ └── cover.jpg
│ └── Same World
│ ├── 01 Intro.mp3
│ └── 02 Found Control.mp3
├── Aurora
│ └── Infections Of A Different Kind Step 1
│ ├── 01 Queendom.lrc
│ ├── 02 Forgotten Love.lrc
│ └── 03 Gentle Earthquakes.mp3
└── Guns N' Roses
└── Use Your Illusion I
├── 01 Right Next Door To Hell.lrc
├── 01 Right Next Door To Hell.mp3
├── 02 Dust N' Bones.lrc
└── 02 Dust N' Bones.mp3
pour ça:
.
├── Alan Walker - Different World
│ ├── 01 Intro.mp3
│ ├── 02 Lost Control.mp3
│ └── cover.jpg
├── Alan Walker - Same World
│ ├── 01 Intro.mp3
│ └── 02 Found Control.mp3
├── Aurora - Infections Of A Different Kind Step 1
│ ├── 01 Queendom.lrc
│ ├── 02 Forgotten Love.lrc
│ └── 03 Gentle Earthquakes.mp3
└── Guns N' Roses - Use Your Illusion I
├── 01 Right Next Door To Hell.lrc
├── 01 Right Next Door To Hell.mp3
├── 02 Dust N' Bones.lrc
└── 02 Dust N' Bones.mp3
Aucune des solutions existantes que j'ai pu trouver ne renomme le répertoire lui-même. Ce serait génial de pouvoir le faire avec zmv, mais je ne sais pas comment.
easytag
peut vous permettre de le faire, mais uniquement pour les fichiers audio - je ne pense pas que cela déplacera les couvertures, etc.Réponses:
Zsh
Non testé:
La deuxième ligne supprime tous les répertoires vides, même ceux qui n'avaient pas de fichier auparavant. Il est possible de contourner cela avec un
mv
wrapper personnalisé qui enregistre à partir de quels répertoires il déplace les choses.Notez que cela traverse des liens symboliques vers des répertoires du répertoire courant.
Utilitaire de renommage Linux
Non testé.
Notez que cela traverse des liens symboliques vers des répertoires dans le répertoire courant et dans ses sous-répertoires. La deuxième ligne supprime tous les répertoires vides, même ceux qui n'avaient pas de fichier auparavant.
Script de renommage Perl
Non testé.
Notez que cela traverse des liens symboliques vers des répertoires dans le répertoire courant et dans ses sous-répertoires. La deuxième ligne supprime tous les répertoires vides, même ceux qui n'avaient pas de fichier auparavant.
Voici une approche plus complexe qui ne supprime que les répertoires dont elle a renommé quelque chose. Encore une fois, non testé.
la source
Quelque chose comme ça peut-être?
Cela passe par tous les répertoires de niveau supérieur du répertoire actuel (les noms de bande). Pour chacun de ces répertoires, il passe par ses sous-répertoires (les noms d'album). Pour chaque paire de nom de bande et de nom d'album, un nouveau répertoire est créé et les fichiers du sous-répertoire y sont déplacés. Les sous-répertoires d'album sont supprimés lorsqu'ils ont été traités, tout comme les répertoires de niveau supérieur de la bande d'origine.
Les
rmdir
appels échoueront si un répertoire contient des noms de fichiers cachés ou si l'un des nouveaux répertoires n'a pas pu être créé.C'est du code totalement non testé. Exécutez-le sur une copie sauvegardée de vos fichiers.
la source
Stratégiquement, plutôt que de déplacer des fichiers, avez-vous envisagé de laisser la structure actuelle en place et de créer des liens pour la nouvelle structure que vous souhaitez?
Tactiquement, un modèle qui fera le travail se présente comme suit:
find
localise tous les répertoires exactement à deux niveaux de profondeur du répertoire de travail actuel, qui devrait être le répertoire contenant les bandes: ainsi deux niveaux de profondeur sont les noms d'album sous les noms de bande. 1xargs
consomme chaque chemin contenant un album et appelle le script bash en ligne.bash -c '...'
prend le chemin de l'album comme premier argument, en le divisant en deux parties: le groupe ($b
) et l'album ($a
). Enfin, le script rassemble les noms dans le format souhaité et relie le nouveau nom de répertoire au répertoire d'origine.Notez que, dans cet exemple, les liens seraient créés dans le même répertoire à partir duquel vous commencez, qui se trouve également être l'endroit où se trouvent les noms de bande.
Vous pouvez - et devriez - modifier la
ln
stratégie ci-dessus pour qu'elle corresponde à votre intention.mv
avec les bons chemins si vous voulez physiquement réorganiser, ouln
si vous voulez créer une "vue" pratique sur le support. Les parties importantes du script bash sont:$b
le nom du groupe. Citer toujours:"$b"
.$a
le nom de l'album. Citer toujours:"$a"
.$1
le chemin d'accès physique au répertoire de l'album. Citer toujours:"$1"
.1 Je pense qu'ils
m{ax,in}depth
sont pris en charge par GNU et certains BSDfind
, mais pas POSIX: dans ce cas, reposez-vous sur*/*
ou sur une gymnastique de coque similaire.la source