web-dev-qa-db-fra.com

Renommer plusieurs fichiers maintenant l'ordre

J'ai une bonne quantité de fichiers à renommer. Mes fichiers s'appellent sample_1.wav sample_2.wav ...

Je dois renommer chaque nom avec un nombre plus petit dans le nom, sample_1.wav doit devenir sample_0.wav et ainsi de suite.

J'ai essayé ce script, mais il ne maintient pas l'ordre:

#!/bin/bash

count=0

for file in *.wav
do
    new=$(printf "sample_%d.wav" "$count")
    mv -- "$file" "$new"
    (( count++ ))
done

Merci pour l'aide

4
Grimdrem

Je pense avoir fait ce que vous demandiez en utilisant Python:

#!/usr/bin/env python

import os

for i in range(0, 30):  # up to the highest number of your filenames
    os.system("mv sample_%i.wav sample_%i.wav" % (i+1, i)) 

Cela réduit le nombre après le trait de soulignement de 1 pour chacun des fichiers. Assurez-vous simplement que vous entrez le plus grand nombre de fichiers dans la deuxième entrée de range.

4
Mart

Bien que Python ou Perl soit plus rapide, vous pouvez implémenter la même idée que réponse de Mart * dans le shell:

for i in {1..100}; do mv sample_$i.wav sample_$((i-1)).wav; done
4
terdon