J'ai un dossier contenant les fichiers suivants:
trackingData-00-1.data, trackingData-00-2.data, ..., trackingData-00-2345.data
Et je voudrais les renommer en formatant des nombres avec 4 chiffres
trackingData-00-0001.data, trackingData-00-0002.data, ..., trackingData-00-2345.data
Comment puis-je atteindre cet objectif avec une commande shell bash?
Réponses:
6 pour la réponse № 1Un pur bash
Solution:
for f in trackingData-00-*.data; do
[[ $f =~ trackingData-00-([0-9]+).data ]]
mv "$f" $(printf "trackingData-00-%04d.data" ${BASH_REMATCH[1]})
done
Une expression régulière extrait le numéro à compléter et le stocke dans le BASH_REMATCH
tableau. ensuite printf
est utilisé pour créer le nouveau nom de fichier, avec le nombre réinséré et complété avec des zéros.
2 pour la réponse № 2
hack sale mais qui travaille:
for i in $(seq 2345); do
mv trackingData-00-$i.data trackingData-00-`printf %04d $i`.data;
done
2 pour la réponse № 3
Vous pouvez utiliser printf
"Options dans awk pour imprimer quatre chiffres:
echo 3 | awk "{printf ("%04i", $1)}"
0003
echo 33 | awk "{printf ("%04i", $1)}"
0033
Donc ça pourrait être:
for file in trackingData*
do
num=$(awk -F[.-] "{printf ("%04i", $3)}" <<< "$file")
mv $file trackingData-00-$num.data
done
Cela utilise awk
avec les deux séparateurs de champs: soit .
ou -
. Ensuite, il prend le 3ème bloc basé sur eux et formate sa valeur avec le %04i
flag (presque équivalent à %d
comme on le voit dans Guide de l’utilisateur de GNU Awk n ° 5.5.2 Lettres de contrôle de format).
1 pour la réponse № 4
Tout d'abord, je suppose qu'il n'y a pas d'espaces dans votre nom de fichier. puis
ls/find...| awk -F"-|\." "{o=$0;$3=sprintf("%04d",$3);$4=".data";gsub(/-./,".");print "mv "o" "$0}" OFS="-"
imprimera le mv ...
commander. pour les exécuter, dirigez simplement la sortie vers sh
comme
ls...|awk ..|sh
le noyau est la partie awk, testez-le un peu:
kent$ echo "trackingData-00-1.data
trackingData-00-2.data"|awk -F"-|\." "{o=$0;$3=sprintf("%04d",$3);$4=".data";gsub(/-./,".");print "mv "o" "$0}" OFS="-"
mv trackingData-00-1.data trackingData-00-0001.data
mv trackingData-00-2.data trackingData-00-0002.data