Renommer des fichiers d'un dossier en numéros séquentiels

230

Je veux renommer les fichiers d'un répertoire en numéros séquentiels. Basé sur la date de création des fichiers.

Par exemple, sadf.jpgpour 0001.jpg, wrjr3.jpgvers 0002.jpget ainsi de suite, le nombre de zéros non significatifs en fonction de la quantité totale de fichiers (pas besoin de zéros supplémentaires s'ils ne sont pas nécessaires).

Gnutt
la source
J'ai regardé stackoverflow.com/questions/880467/… , mais je ne peux pas le faire fonctionner pour moi.
Gnutt
1
Linux / Unix ne stocke pas de date de création.
pause jusqu'à nouvel ordre.
1
ls -1tr | renommer -v 's /.*/ notre $ i; if (! $ i) {$ i = 1;} sprintf ("% 04d.jpg", $ i ++) / e'
maXp

Réponses:

314

Essayez d'utiliser une boucle,, letet printfpour le rembourrage:

a=1
for i in *.jpg; do
  new=$(printf "%04d.jpg" "$a") #04 pad to length of 4
  mv -i -- "$i" "$new"
  let a=a+1
done

l'utilisation de l' -iindicateur empêche d'écraser automatiquement les fichiers existants.

gauteh
la source
4
Vous pouvez également faire printf -v new "%04d.jpg" ${a}pour mettre la valeur dans la variable. Et ((a++))fonctionne pour incrémenter la variable. De plus, cela ne le fait pas dans l'ordre de la date de création ou ne minimise pas le remplissage, ce qui est spécifié par l'OP. Cependant, il convient de noter que Linux / Unix ne stocke pas de date de création.
pause jusqu'à nouvel ordre.
3
Besoin de guillemet double enveloppez le mv pour que cela fonctionne dans mon environnement bash. mv "$ {i}" "$ {new}"
Gary Thomann
2
Cela pourrait simplement être Cygwin (bien que son comportement de terminal soit largement identique aux shells Unix normaux) mais il semble avoir un problème lorsqu'il y a des espaces dans le nom de fichier.
Geesh_SO
2
Il serait probablement également souhaitable d'utiliser mv -- "$i" "$new"pour gérer correctement les noms de fichiers source qui commencent par des tirets; tel quel, mvessaiera d'analyser ces noms de fichiers en tant que collections de drapeaux.
Charles Duffy
2
J'ai perdu environ 800 fichiers en un coup d'œil. Je pense que cela -idevrait être inclus dans la réponse et la note devrait être réécrite en conséquence. ce sera plus sûr. :(
KrIsHnA
270

La beauté en une seule ligne:

ls -v | cat -n | while read n f; do mv -n "$f" "$n.ext"; done 

Vous pouvez changer .extavec .png, .jpgetc.

Communauté
la source
4
légende :), je l'ai utilisé sur git shell sur windows, fonctionne très bien! ^^.
Mr.K
4
Fonctionne très bien. La beauté en une seule ligne. J'ai ajouté ls -tr pour récupérer les fichiers à l'heure de la dernière modification.
Ranjith Siji
32
ajouter printf comme ceci: ls | cat -n | while read n f; do mv "$f" `printf "%04d.extension" $n`; doneavoir zéro numéros matelassés
Seweryn Niemiec
8
Avertissement: vous souhaiterez peut-être ajouter -nà la commande mv pour éviter d'écraser accidentellement des fichiers. Découvert à la dure!
Ian Danforth
4
Regrouper quelques bonnes idées de commentaires sur cette réponse et d'autres: ls -1prt | grep -v "/$" | cat -n | while read n f; do mv -n "${f}" "$(printf "%04d" $n).${f#*.}"; done Résultats: (1) triés par ordre de modification, fichiers ultérieurs avec index ultérieurs; (2) ignore les répertoires - et n'est pas récursif; (3) index de tampons; (4) conserve l'extension d'origine.
Jorge
63

J'aime la solution de gauteh pour sa simplicité, mais elle a un inconvénient important. Lors de l'exécution sur des milliers de fichiers, vous pouvez obtenir un message "liste d'arguments trop longue" ( plus à ce sujet ), et deuxièmement, le script peut devenir très lent. Dans mon cas, en l'exécutant sur environ 36 000 fichiers, le script s'est déplacé d'environ. un article par seconde! Je ne sais pas vraiment pourquoi cela se produit, mais la règle que j'ai reçue de mes collègues était " findest votre ami" .

find -name '*.jpg' | # find jpegs
gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }' | # build mv command
bash # run that command

Pour compter les objets et construire la commande, gawk a été utilisé. Notez cependant la principale différence. Par défaut, findrecherche les fichiers dans le répertoire en cours et ses sous-répertoires, assurez-vous donc de limiter la recherche sur le répertoire en cours uniquement, si nécessaire (utilisez man findpour voir comment).

Pero
la source
7
J'ai modifié pour utiliser le numéro de ligne NRpour une commande plus courte. gawk '{ printf "mv %s %04d.jpg\n", $0, NR }'
Apiwat Chantawibul
12
Des vulnérabilités de sécurité massives ici. Réfléchissez si vous avez un fichier nommé $(rm -rf /).jpg.
Charles Duffy
Merci d'avoir signalé cela Charles. Pouvez-vous suggérer une solution sûre?
beibei2
2
tombe en panne si le nom de fichier contient des espaces. Utilisez des guillemets autour du nom du fichier source. printf "mv \"% s \ "% 04d.jpg \ n", $ 0, a ++
baskin
1
La forboucle ne prend pas 1 seconde par fichier à proprement parler. Il faut beaucoup de temps pour extraire les 36 000 noms de fichiers du système de fichiers, puis les boucler assez rapidement. De nombreux systèmes de fichiers ont des problèmes avec les grands répertoires, quelles que soient les commandes précises que vous exécutez; mais généralement, findil sera plus rapide qu'un caractère générique de shell, car il doit extraire et trier la liste des fichiers correspondants.
tripleee
30

avec la commande "renommer"

rename -N 0001 -X 's/.*/$N/' *.jpg

ou

rename -N 0001 's/.*/$N.jpg/' *.jpg
Roman Rhrn Nesterov
la source
32
Mon rename(Linux Mint 13) n'a pas d' -Noption.
Luke H
Je peux voter pour la mention de la commande renommer, je n'en ai jamais entendu parler
Dmitry Korolyov
8
Je suis intéressé à savoir où l'on obtient une commande renommer avec l'option -N. Mon Ubuntu 14.04 ne l'a pas.
Stephan Henningsen
1
J'adore la renamecommande, mais je ne l'ai jamais su -N! Merci!
Dan Lecocq
1
Il existe au moins trois outils différents appelésrename . Le lien publié par @Bostrot est encore un autre outil de renommage et il semble que @RomanRhrnNesterov l'ait utilisé. ¶ A tous les utilisateurs de renamepar Peder Stray et Larry Wall (package perl-renamesur arch linux et package renamesur debian / ubuntu): Vous pouvez $Nvous définir :perl-rename '$N=sprintf("%04d",++$N); s/.*/$N.jpg/' *.jpg
Socowi
30

l'utilisation de la solution de Pero sur OSX a nécessité quelques modifications. J'ai utilisé:

find . -name '*.jpg' \
| awk 'BEGIN{ a=0 }{ printf "mv \"%s\" %04d.jpg\n", $0, a++ }' \
| bash

note: les barres obliques inverses sont là pour la suite de la ligne

modifier 20 juillet 2015: incorporé les commentaires de @ klaustopher pour citer l' \"%s\"argument de la mvcommande afin de prendre en charge les noms de fichiers avec des espaces.

beibei2
la source
3
Comme la solution de Pero, il existe des failles de sécurité ici. Réfléchissez si vous avez un fichier nommé $(rm -rf /).jpg.
Charles Duffy
Merci, ça marche. Mais vous devez citer le premier argument de mv. Si vous avez un fichier nommé ie some thing.jpgvotre script échoue. Voici ce que j'ai utilisé:find . -name '*.jpg' | awk 'BEGIN{ a=0 }{ printf "mv \"%s"\ wallpaper-%04d.jpg\n", $0, a++ }' | bash
klaustopher
j'utiliserais probablement -maxdepth 1pour travailler uniquement sur jpgs dans le répertoire courant, car il vaut mieux être prudent que désolé.
Peter Perháč
Si vous déplacez le caractère de canal à la fin de la ligne précédente, vous n'avez pas besoin de barres obliques inverses.
tripleee
vous pouvez utiliser ls -1 *.jpgau lieu de trouver, sinon il ne sera pas trié. Ou ajoutez un |sort|avant awk
JPT
28

Un liner bash one très simple qui conserve les extensions d'origine, ajoute des zéros de tête et fonctionne également sous OSX:

num=0; for i in *; do mv "$i" "$(printf '%04d' $num).${i#*.}"; ((num++)); done

Version simplifiée de http://ubuntuforums.org/showthread.php?t=1355021

Roy Shilkrot
la source
Exactement ce que je cherchais. J'aime que vous puissiez définir l'index de démarrage.
Jack Vial
2
Veuillez noter que cela ne conservera pas l' ordre d' origine des fichiers.
Roy Shilkrot
@RoyShilkrot Qu'entendez-vous par » ne conservera pas la commande d'origine «? Les globes dans bash et autres shells posix se développent dans l'ordre trié en fonction des paramètres régionaux du système. Bien sûr, cela ne trie pas 9.extavant 11.ext, mais d'autres outils (comme ls) ne le feront pas non plus.
Socowi
11

Pour travailler dans toutes les situations, mettez un \ "pour les fichiers qui ont de l'espace dans le nom

find . -name '*.jpg' | gawk 'BEGIN{ a=1 }{ printf "mv \"%s\" %04d.jpg\n", $0, a++ }' | bash
Abdala Cerqueira
la source
3
Ne couvre en fait pas toutes les situations. Un nom de fichier contenant des guillemets littéraux pourrait s'échapper trivialement - et comme vous utilisez des guillemets doubles plutôt que des guillemets simples, les extensions comme $(rm -rf /)sont toujours respectées.
Charles Duffy
11

Si votre renamene prend pas en charge -N, vous pouvez faire quelque chose comme ceci:

ls -1 -c | xargs rename -n 's/.*/our $i; sprintf("%04d.jpg", $i++)/e'

Modifier Pour commencer avec un numéro donné, vous pouvez utiliser le code (quelque peu laid) ci-dessous, remplacez simplement 123 par le numéro que vous voulez:

ls -1 -c | xargs rename -n 's/.*/our $i; if(!$i) { $i=123; } sprintf("%04d.jpg", $i++)/e'

Cela répertorie les fichiers par date de création (le plus récent en premier, ajoutez -r à ls pour inverser le tri), puis envoie cette liste de fichiers à renommer. Renommer utilise du code perl dans l'expression régulière pour formater et incrémenter le compteur.

Cependant, si vous avez affaire à des images JPEG avec des informations EXIF, je recommanderais exiftool

Ceci provient de la documentation exiftool , sous "Renommer des exemples"

   exiftool '-FileName<CreateDate' -d %Y%m%d_%H%M%S%%-c.%%e dir

   Rename all images in "dir" according to the "CreateDate" date and time, adding a copy number with leading '-' if the file already exists ("%-c"), and
   preserving the original file extension (%e).  Note the extra '%' necessary to escape the filename codes (%c and %e) in the date format string.
Luke H
la source
Comment puis-je commencer à un numéro spécifique en utilisant rename?
Jan
6

Sur OSX , installez le script de renommage depuis Homebrew:

brew install rename

Ensuite, vous pouvez le faire très ridiculement facilement:

rename -e 's/.*/$N.jpg/' *.jpg

Ou pour ajouter un joli préfixe:

rename -e 's/.*/photo-$N.jpg/' *.jpg
trisweb
la source
3
C'est un excellent script, et cela ne dépend que de Perl. brew ne fonctionne que sur mac, mais vous pouvez le récupérer sur github ( github.com/ap/rename ) et l'utiliser sur Linux ou Windows.
Tim Danner
3
cela ne fonctionne pas pour moi. J'ai euGlobal symbol "$N" requires explicit package name (did you forget to declare "my $N"?) at (user-supplied code).
Anthony Chung
En tant qu'utilisateur Mac, je suis heureux d'annoncer que l'application de renommage liée à @TimDanner est super portable, c'était aussi simple que de télécharger l'archive Zip, en déposant l'utilitaire de renommage dans un répertoire que mon chemin de profil bash est configuré pour voir , et cela fonctionne dès la sortie de la boîte. Je suis surpris que ce ne soit pas disponible sur MacPorts. Je trouve tellement bizarre que j'ai une page de manuel BSD pour Rename (2) mais quand run rename cela dirait qu'aucune commande n'existe. Allez comprendre.
adamlogan
2

Suivez la commande renommez tous les fichiers en séquence et également en extension minuscule:

rename --counter-format 000001 --lower-case --keep-extension --expr='$_ = "$N" if @EXT' *
OzzyCzech
la source
1

J'ai eu un problème similaire et j'ai écrit un script shell pour cette raison. J'ai décidé de le publier, même si de nombreuses bonnes réponses ont déjà été publiées, car je pense que cela peut être utile pour quelqu'un. N'hésitez pas à l'améliorer!

numéroter

@Gnutt Le comportement souhaité peut être obtenu en tapant ce qui suit:

./numerate.sh -d <path to directory> -o modtime -L 4 -b <startnumber> -r

Si l'option -r est omise, l'alésage sera uniquement simulé (devrait être utile pour les tests).

L'otion L décrit la longueur du numéro cible (qui sera rempli de zéros de tête) il est également possible d'ajouter un préfixe / suffixe avec les options -p <prefix> -s <suffix> .

Dans le cas où quelqu'un souhaite que les fichiers soient triés numériquement avant d'être numérotés, supprimez simplement l' -o modtimeoption.

Paul Weibert
la source
1
a=1

for i in *.jpg; do
 mv -- "$i" "$a.jpg"
 a=`expr $a + 1`
done
Shubh
la source
1

Supposons que nous ayons ces fichiers dans un répertoire, classés par ordre de création, le premier étant le plus ancien:

a.jpg
b.JPG
c.jpeg
d.tar.gz
e

ls -1craffiche ensuite exactement la liste ci-dessus. Vous pouvez ensuite utiliser rename:

ls -1cr | xargs rename -n 's/^[^\.]*(\..*)?$/our $i; sprintf("%03d$1", $i++)/e'

qui sort

rename(a.jpg, 000.jpg)
rename(b.JPG, 001.JPG)
rename(c.jpeg, 002.jpeg)
rename(d.tar.gz, 003.tar.gz)
Use of uninitialized value $1 in concatenation (.) or string at (eval 4) line 1.
rename(e, 004)

L'avertissement «utilisation d'une valeur non initialisée […]» s'affiche pour les fichiers sans extension; vous pouvez l'ignorer.

Supprimez -nde la renamecommande pour appliquer réellement le changement de nom.

Cette réponse est inspirée de la réponse de Luke d'avril 2014 . Il ignore l'exigence de Gnutt de définir le nombre de zéros non significatifs en fonction de la quantité totale de fichiers.

Michael Schmid
la source
C'était la réponse la plus utile ici pour moi, principalement parce que je voulais exécuter l'opération à sec avant qu'elle ne s'exécute, et aussi parce que je pouvais régler l'ordre en changeant ls -1tUpour l'heure de création. Il avait également besoin d'être renameinstallé, ce que je n'avais pas.
antonyh
1

Encore une fois, en utilisant la solution de Pero avec peu de modifications, car findtraversera l'arborescence du répertoire dans l'ordre, les éléments sont stockés dans les entrées du répertoire. Cela sera (principalement) cohérent d'une exécution à l'autre, sur la même machine et sera essentiellement "ordre de création de fichiers / répertoires" s'il n'y a pas eu de suppressions.

Cependant, dans certains cas, vous devez obtenir un ordre logique, par exemple, par nom, qui est utilisé dans cet exemple.

find -name '*.jpg' | sort -n | # find jpegs
gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }' | # build mv command
bash # run that command 
Ruslan Gerasimov
la source
3
Ne l'utilisez PAS. Rediriger vers bash comme celui-ci est un énorme risque pour la sécurité. Que faire si l'un des noms de fichier est du formulaire blahblah; rm -r * blahblah.jpg?
xhienne
1

Trié par heure, limité à jpg, zéros de tête et nom de base (au cas où vous en voudriez probablement un):

ls -t *.jpg | cat -n |                                           \
while read n f; do mv "$f" "$(printf thumb_%04d.jpg $n)"; done

(le tout sur une seule ligne, sans le \)

Frank Nocke
la source
Dans le grand schéma des choses, de nombreuses réponses sur cette page sont horribles, alors peut-être que cela ne mérite pas particulièrement un downvote. J'hésite à voter contre tout ce qui utilise lsdans un script.
tripleee
Je garde cette réponse du côté négatif car, même si elle est peut-être fragile, elle a fonctionné pour un cas d'utilisation spécifique que j'avais.
Ville
1
ls -1tr | rename -vn 's/.*/our $i;if(!$i){$i=1;} sprintf("%04d.jpg", $i++)/e'

rename -vn - supprime n pour désactiver le mode test

{$ i = 1;} - numéro de début de contrôle

"% 04d.jpg" - contrôlez le décompte zéro 04 et définissez l'extension de sortie .jpg

maXp
la source
Vote en faveur de cette réponse car elle utilise uniquement le renommage natif. Mon cas d'utilisation consistait à remplacer les deux premiers chiffres des fichiers par des nombres commençant à 01:rename -v -n 's/../our $i;if(!$i){$i=1;} sprintf("%02d", $i++)/e' *
2018
1

Pour moi, cette combinaison de réponses a parfaitement fonctionné:

ls -v | gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }' | bash
  • ls -v aide à commander 1 10 9 correctement: ordre 1 9 10, évitant les problèmes d'extension de nom de fichier avec jpg JPG jpeg
  • gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }'renumbers avec 4 caractères et zéros de tête. En évitant mv, je n'essaie pas accidentellement d'écraser tout ce qui existe déjà en ayant accidentellement le même numéro.
  • bash exécute

Soyez conscient de ce que @xhienne a dit, canaliser du contenu inconnu vers bash est un risque pour la sécurité. Mais ce n'était pas le cas pour moi car j'utilisais mes photos numérisées.

nintendojet
la source
0

Vous pouvez également utiliser ls

ls *.JPG| awk 'BEGIN{ a=0 }{ printf "mv %s gopro_%04d.jpg\n", $0, a++ }' | bash
Bartburkhardt
la source
5
Voir mywiki.wooledge.org/ParsingLs , ainsi que les descriptions des vulnérabilités de sécurité sur les autres solutions similaires cassées.
Charles Duffy
1
Ne l'utilisez PAS. Rediriger vers bash comme celui-ci est un énorme risque pour la sécurité. Que faire si l'un des noms de fichier est du formulaire blahblah; rm -r * blahblah.JPG?
xhienne
0

La majorité des autres solutions écraseront les fichiers existants déjà nommés sous forme de nombre. C'est particulièrement un problème si vous exécutez le script, ajoutez plus de fichiers, puis réexécutez le script.

Ce script renomme d'abord les fichiers numériques existants:

#!/usr/bin/perl

use strict;
use warnings;

use File::Temp qw/tempfile/;

my $dir = $ARGV[0]
    or die "Please specify directory as first argument";

opendir(my $dh, $dir) or die "can't opendir $dir: $!";

# First rename any files that are already numeric
while (my @files = grep { /^[0-9]+(\..*)?$/ } readdir($dh))
{
    for my $old (@files) {
        my $ext = $old =~ /(\.[^.]+)$/ ? $1 : '';
        my ($fh, $new) = tempfile(DIR => $dir, SUFFIX => $ext);
        close $fh;
        rename "$dir/$old", $new;
    }
}

rewinddir $dh;
my $i;
while (my $file = readdir($dh))
{
    next if $file =~ /\A\.\.?\z/;
    my $ext = $file =~ /(\.[^.]+)$/ ? $1 : '';
    rename "$dir/$file", sprintf("%s/%04d%s", $dir, ++$i, $ext); 
}
Andy Beverley
la source
0

Cet oneliner répertorie tous les fichiers du répertoire en cours, les trie par horodatage de création dans l'ordre inverse (signifie que le fichier le plus ancien se trouve au début) et renomme automatiquement avec des zéros de fin en fonction de la quantité de fichiers. L'extension de fichier sera conservée.

Je n'ai généralement qu'un seul dossier depuis des années pour les photos et les films de téléphones portables. En appliquant cette commande, mes photos et films sont prêts pour un diaporama dans le bon ordre sur le téléviseur ou l'archivage.

Sachez que si vous avez des collisions de noms de fichiers, vous perdez des fichiers. Donc, renommez d'abord quelque chose d'étrange temp001.jpg, puis exécutez votre nom de fichier final.

DIGITS=$(ls | wc -l | xargs | wc -c | xargs); ls -tcr | cat -n | while read n f; do mv "$f" "$(printf "%0${DIGITS}d" $n).${f##*.}"; done
Flavio Aiello
la source
1
Il lsvaut mieux éviter de courir une fois mais deux fois, mais je ne l'ai pas étudié en profondeur.
tripleee
1. Si je propose intentionnellement un oneliner, pourquoi le changez-vous ensuite? De nombreux utilisateurs comme moi préfèrent copier-coller un oneliner pour terminer une tâche. Pour ceux qui préfèrent copier par ligne, il y a d'autres réponses dans ce fil. 2. La question d'origine était "le nombre de zéros non significatifs en fonction du nombre total de fichiers" et cela est fait par le premier ls, c'est pourquoi deux d'entre eux sont nécessaires. 3. Ces commandes sont des one-shot et ne sont pas censées être incluses dans les scripts, donc il y a une raison pour laquelle les gens préfèrent les one-liners
Flavio Aiello
1
Désolé, je ne savais pas que vous pensiez que c'était important. Pour moi, être capable de lire le code l'emporte largement sur la possibilité de le copier / coller en une seule ligne. Je n'ai pas trouvé d'environnement où Bash aurait un problème avec une pâte qui s'étend sur plusieurs lignes, mais je suis peut-être en train d'oublier quelque chose.
tripleee
0

Voici ce qui a fonctionné pour moi.
J'ai utilisé la commande rename de sorte que si un fichier contient des espaces au nom de celui-ci, mv commande ne soit pas confondue entre les espaces et le fichier réel.

Ici, j'ai remplacé les espaces, '' dans un nom de fichier par '_' pour tous les fichiers jpg
#! / bin / bash
renommer 'y / / _ /' * jpg #remplacer les espaces par _
soit x = 0;
pour i dans * .jpg; faire
    soit x = (x + 1)
    mv $ i $ x.jpg
terminé
rishang bhavsar
la source
Install rename sur linux (ubuntu), "sudo apt install rename"
rishang bhavsar
0

De nos jours, il y a une option après avoir sélectionné plusieurs fichiers à renommer (j'ai vu dans le gestionnaire de fichiers thunar).

  1. sélectionner plusieurs fichiers
  2. vérifier les options
  3. sélectionnez renommer

Une invite est fournie avec tous les fichiers dans ce répertoire particulier, il suffit de vérifier avec la section catégorie

Rudr
la source
-1

Ce script triera les fichiers par date de création sur Mac OS bash. Je l'utilise pour renommer en masse des vidéos. Modifiez simplement l'extension et la première partie du nom.

ls -trU *.mp4| awk 'BEGIN{ a=0 }{ printf "mv %s lecture_%03d.mp4\n", $0, a++ }' | bash
Adam Mendoza
la source
1
Ne l'utilisez PAS. Rediriger vers bash comme celui-ci est un énorme risque pour la sécurité. Que faire si l'un des noms de fichier est du formulaire blahblah; rm -r * blahblah.mp4?
xhienne
-1

Voici une autre solution avec la commande "renommer":

find -name 'access.log.*.gz' | sort -Vr | rename 's/(\d+)/$1+1/ge'
panticz
la source
Pour restaurer les zéros non rename 's/(\d+)/sprintf("%04d",$1)+1/ge'
significatifs
Ne fonctionne pas comme prévu, pour un dossier contenant des fichiers avec des noms comme celui-ci: DSC_3451.JPG, DSC_3452.JPG etc. find -name '* .JPG' | sort -Vr | renommer 's / (\ d +) / $ 1 + 1 / ge' ne modifie rien
Tiberiu C.
-2

La réponse de Pero m'a amené ici :)

Je voulais renommer les fichiers en fonction du temps car les visionneuses d'images ne montraient pas les images dans l'ordre du temps.

ls -tr *.jpg | # list jpegs relative to time
gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }' | # build mv command
bash # run that command
marikhu
la source
2
Ne l'utilisez PAS. Rediriger vers bash comme celui-ci est un énorme risque pour la sécurité. Que faire si l'un des noms de fichier est du formulaire blahblah; rm -r * blahblah.jpg? Juste un exemple extrême.
xhienne
-2

Si vous utilisez Image Annotator pour étiqueter les images.

$ make qt5py3

$ python3 labelImg.py

soumen sinha mahapatra
la source
-3

Pour renuméroter 6000, des fichiers dans un dossier, vous pouvez utiliser l'option «Renommer» du programme ACDsee.

Pour définir un préfixe, utilisez ce format: ####"*"

Ensuite, définissez le numéro de début et appuyez sur Renommer et le programme renommera tous les 6000 fichiers avec des numéros séquentiels.

Meule
la source
1
L'OP demande un ensemble de commandes dans Unix Bourne Shell. Vous proposez un produit commercial qui ne fonctionne que dans un environnement Windows.
xhienne