web-dev-qa-db-fra.com

Comment puis-je ajouter zéro padding aux noms de fichiers contenant déjà des numéros?

J'ai utilisé Sound Juicer pour extraire un CD d’audio pour un livre d’apprentissage des langues afin de pouvoir les écouter sur mon Android. Toutefois, Sound Juicer ne semble avoir la possibilité de numéroter que des fichiers sans zéros. Comme ça:

track_1.mp3
track_10.mp3
track_11.mp3

Cela conduit à des commandes confuses sur mon lecteur de musique. Donc, je veux ajouter des zéros au nom, pour qu'ils soient correctement ordonnés, comme ceci:

track_01.mp3
track_02.mp3
track_03.mp3

Comment puis-je accomplir cela? J'ai essayé d'utiliser GPRename, mais s'il a la possibilité d'ajouter des chiffres, il ne semble pas avoir d'options pour l'ajout de zéros non significatifs.

Y at-il un meilleur programme ou quelque chose que je peux faire en ligne de commande?

7
Questioner

Je suppose qu'il vous suffit de renommer les fichiers 1 à 9, car ce sont ceux-là qui nécessitent un remplissage. Il y a plusieurs façons de le faire.

Vous pouvez exécuter la commande ci-dessous:

for n in $(seq 9); do mv track_$n.mp3 track_0$n.mp3; done;

Ceci renommera les pistes track_1.mp3 - track_9.mp3 en track_01.mp3 - track_09.mp3.


Pour le décomposer, cela ressemble à ceci:

for n in $(seq 9)
do
    mv track_$n.mp3 track_0$n.mp3
done
  • for n in $(seq 9): pour chaque nombre figurant dans le résultat de la commande seq 9, qui est une commande ne répertoriant que les nombres 1 à 9, do,
  • mv track_$n.mp3 track_0$n.mp3: c'est la commande qui renomme les fichiers. Il substitue la valeur de n en parcourant tous les nombres. Donc, il fait mv track_1.mp3 track_01.mp3, mv track_2.mp3 track_02.mp3, jusqu'au dernier numéro qui est 9.
8
Alaa Ali

Le script ci-dessous pour renommer les fichiers est un répertoire. Il calcule le nombre de zéros non significatifs nécessaires, quel que soit le nombre de fichiers (si> 100, davantage de zéros sont nécessaires) et renomme automatiquement les fichiers.

Pour l'utiliser

copiez le script ci-dessous dans un fichier vide, dans la section de tête, définissez le répertoire source, le préfixe ("track-" dans ce cas) et l'extension de fichier des fichiers que vous souhaitez renommer. Enregistrez-le sous rename.py et exécutez-le à l'aide de la commande suivante:

python3 /path/to/script.py

Le scénario:

#!/usr/bin/env python3

import shutil
import os

sourcedir = "/path/to/sourcedir"
prefix = "track_"
extension = "mp3"

files = [(f, f[f.rfind("."):], f[:f.rfind(".")].replace(prefix, "")) for f in os.listdir(sourcedir) if f.endswith(extension)]
maxlen = len(max([f[2] for f in files], key = len))

for item in files:
    zeros = maxlen - len(item[2])
    shutil.move(sourcedir+"/"+item[0], sourcedir+"/"+prefix+str(zeros*"0"+item[2])+item[1])
4
Jacob Vlijm

Créez un script qui fonctionnera comme un commande.

Faites ce fichier sur le répertoire où vous suivez le fichier existe.

  • Fait comme ça

    touch change
    chmod +x change
    vim change
    
  • Dans cette écriture

    #!/bin/bash
    n=0
    for m in {00 .. 99}
    do
       mv track_$n.mp3 track_$m
       n=`expr $n + 1``
    done
    
1
Dishank Jindal

GPRename insérera automatiquement un zéro si vous renommez 10 fichiers ou plus (deux si vous renommez 100 ou plus, etc.) lorsque vous utilisez la fonction numérique. Assurez-vous simplement que Zero auto-fill est activé dans le menu Options.

1
Aibara

Bien sûr, il y a plusieurs façons de le faire. Vous pouvez par exemple:

  • Séparer les parties
  • pad la partie qui a le numéro
  • concaténer la partie individuelle dans le nouveau nom

Mettez ceci dans une boucle:

#!/bin/bash

item="track_1.mp3"

part1=`echo $item | awk -F_ '{print $1}'`
part2=`echo $item | awk -F_ '{print $2}'`
part2a=`echo $part2 | awk -F. '{print $1}'`
part2b=`echo $part2 | awk -F. '{print $2}'`
number=`printf "%02d" $part2a`
seperator="_"
newname="$part1$seperator$number.$part2b"
echo $newname

La boucle:

#!/bin/bash

for item in track_1.mp3 track_10.mp3 track_11.mp3
do
    part1=`echo $item | awk -F_ '{print $1}'`
    part2=`echo $item | awk -F_ '{print $2}'`
    part2a=`echo $part2 | awk -F. '{print $1}'`
    part2b=`echo $part2 | awk -F. '{print $2}'`
    number=`printf "%02d" $part2a`
    seperator="_"
    newname="$part1$seperator$number.$part2b"
    echo "Renaming $item -> $newname"
    mv $item $newname
done
enter code here
1
L. D. James