J'ai foiré et ai accidentellement un tas de fichiers avec l'extension .mp3.mp3.mp3.mp3
Comment puis-je les modifier, de manière récursive - et sur plusieurs annuaires - pour les définir simplement .mp3
?
Il existe une solution assez simple, qui consiste à tout couper du premier ".mp3", puis à ajouter ".mp3". Alors:
for file in $(find . -name "*.mp3"); do mv "$file" "${file%%.mp3*}.mp3"; done
Utilisation de l' rename
utilitaire fourni avec perl ( perl-rename
sur certains systèmes) et d'un shell avec **
(zsh ou bash avec shopt -s globstar
, entre autres):
rename 's/(\.mp3)+$/.mp3/' /somedir/**/*.mp3
En utilisant la find
commande dans bash
et quelques scripts créatifs, ceci peut être nettoyé comme par magie. Les scripts suivants ont été testés sous Mac OS X 10.9.5 mais devraient également fonctionner correctement sous Linux. Commencez par exécuter ceci comme un «essai à sec» pour vous assurer de cibler les bons fichiers:
find '/path/to/your/files' -type f -name '*.mp3.mp3*' |\
while read RAW_FILE
do
DIRNAME=$(dirname "$RAW_FILE")
BASENAME=$(basename "$RAW_FILE")
FILENAME="${BASENAME%%.*}"
EXTENSION="${BASENAME#*.}"
echo "mv "${RAW_FILE}" "${DIRNAME}/${FILENAME}".mp3"
done
Vous devez d’abord changer le /path/to/your/files
pour faire correspondre le chemin réel aux fichiers affectés sur le système. A noter également la dernière ligne qui est echo
d'une mv
commande (de déplacement). Je le fais pour m'assurer que le script cible les bons fichiers.
La find
logique de base est la suivante:
find '/path/to/your/files' -type f -name '*.mp3.mp3*'
Ce qui signifie fondamentalement «Trouvez tous les fichiers du chemin /path/to/your/files
qui sont en fait des fichiers (et non des répertoires) ayant un motif de nom de fichier correspondant *.mp3.mp3*
. Cela devrait intercepter tous les fichiers auxquels plus d'un fichier est .mp3
attaché. .mp3.mp3
, .mp3.mp3.mp3
, .mp3.mp3.mp3.mp3
, .mp3.mp3.mp3.mp3.mp3
, Etc ...
Le script ne se gênera pas pour traiter les fichiers qui ont juste le bon résultat, .mp3
ce qui constitue un avantage certain en termes de rapidité si vous ne possédez qu'un petit sous-ensemble de fichiers mal nommés .mp3.mp3.mp3.mp3
au lieu de devoir renommer tous les fichiers .mp3
.
Ainsi, lorsque vous exécutez cette opération, vous devriez voir une liste de mv
commandes «d'essai à sec» qui résoudront votre problème: Recherchez tous ces .mp3
fichiers multiples et renommez-les en un fichier singulier .mp3
.
Maintenant que cela fonctionne bien, lancez le script final comme ceci:
find '/path/to/your/files' -type f -name '*.mp3.mp3*' |\
while read RAW_FILE
do
DIRNAME=$(dirname "$RAW_FILE")
BASENAME=$(basename "$RAW_FILE")
FILENAME="${BASENAME%%.*}"
EXTENSION="${BASENAME#*.}"
mv "${RAW_FILE}" "${DIRNAME}/${FILENAME}".mp3
done
Notez que la dernière ligne est la mv
commande fonctionnelle actuelle . Lorsque vous exécutez cette version du script, votre répertoire entier sera recherché pour ces plusieurs .mp3
fichiers, puis exécutera la mv
commande complète pour résoudre le problème.