2010-03-10 8 views
4

Je voudrais renommer la numérotation des fichiers: J'ai un fichier avec '???' format j'ai besoin de les mettre dans '????'.Renommer plusieurs fichiers dans le BASH

myfile_100_asd_4 to myfile_0100_asd_4 

Merci Arman.

Pas si élégante SOLUTION:

#/bin/bash 
snap=`ls -t *_???` 
c=26 
for k in $snap 
do 

    end=${k} 
    echo mv $k ${k%_*}_0${k##*_}_asd_4 
    ((c=c-1)) 

done 

Cela fonctionne pour moi parce que j'ai des fichiers myfile_100 aussi bien.

Répondre

5

il suffit d'utiliser le shell,

for file in myfile* 
do 
    t=${file#*_} 
    f=${file%%_*} 
    number=$(printf "%04d" ${t%%_*}) 
    newfile="${f}_${number}_${t#*_}" 
    echo mv "$file" "$newfile" 
done 
1

Il y a une application UNIX appelée s (manpage) qui prend en charge les renommer plusieurs fichiers à l'aide des modèles de recherche et de substitution. Vous devriez être capable de bricoler un motif qui injectera ce 0 supplémentaire dans le nom de fichier.

Editer: La page du projet w/lien de téléchargement peut être trouvée à Freshmeat.

+0

Sur ma distribution (Mandriva) je n'ai : mren (1) Nom mren - renommer un fichier MSDOS existant aucun ren. – Arman

+0

J'ai remarqué que certaines distributions ne semblent pas être livrées avec, donc j'ai fourni un lien vers la page Freshmeat avec un lien vers le téléchargement de la source. – slyfox

8

Utilisez rename, un petit script qui vient avec perl:

rename 's/(\d{3})/0$1/g' myfile_* 

Si vous passez le paramètre -n avant l'expression qu'il imprime seulement ce rebaptise aurait fait, aucune action ne soit prise. De cette façon, vous pouvez vérifier que cela fonctionne ok avant de renommer vos fichiers:

rename -n 's/(\d{3})/0$1/g' myfile_* 
+1

Hmm, il est tellement dommage que je ne peux pas marquer cela comme une autre solution :) – Arman

0

Essayez:

for file in `ls my*` 
do 
a=`echo $file | cut -d_ -f1` 
b=`echo $file | cut -d_ -f2` 
c=`echo $file | cut -d_ -f3,4` 

new=${a}_0${b}_${c} 
mv $file $new 
done 
+0

utiliser l'expansion shell au lieu de 'ls'. et shell a des capacités de manipulation de chaînes, donc les commandes externes ne sont vraiment pas nécessaires. – ghostdog74

+0

ghostdog74: pourriez-vous m'expliquer davantage? – Arman

+0

Wow, je n'ai jamais utilisé la "coupe", c'est tellement utile :) – Arman

Questions connexes