Renommer en bloc les fichiers

18

J'ai plusieurs fichiers:

10.3.100.179_01_20161018_230014_5335.jpg
10.3.100.179_01_20161018_231514_0814.jpg
10.3.100.179_01_20161018_233014_5706.jpg
10.3.100.179_01_20161018_234514_0896.jpg
10.3.100.179_01_20161018_230114_5395.jpg
10.3.100.179_01_20161018_231614_1145.jpg
10.3.100.179_01_20161018_233114_6047.jpg
10.3.100.179_01_20161018_234614_0547.jpg
10.3.100.179_01_20161018_230114_5492.jpg
10.3.100.179_01_20161018_231614_1264.jpg
10.3.100.179_01_20161018_233114_6146.jpg
10.3.100.179_01_20161018_234614_0658.jpg
10.3.100.179_01_20161018_230214_5630.jpg
10.3.100.179_01_20161018_231714_7135.jpg

Je souhaite renommer ce format:

10.4.100.135_01_20161013131108389_TIMING.jpg
10.4.100.135_01_20161013131111390_TIMING.jpg
10.4.100.135_01_20161013131114401_TIMING.jpg
10.4.100.135_01_20161013131117431_TIMING.jpg
10.4.100.135_01_20161013131120418_TIMING.jpg
10.4.100.135_01_20161013131123461_TIMING.jpg
10.4.100.135_01_20161013131126511_TIMING.jpg

Il faut supprimer le _ dans l'horodatage et ajouter le _TIMING .

    
posée Jojo Mendoza 21.10.2016 - 08:33
la source

8 réponses

29

Installez renameutils et utilisez qmv avec votre éditeur de texte favori.

qmv charge tous les noms dans votre éditeur. Lorsque vous enregistrez et fermez l'application, vos modifications sont appliquées aux fichiers réels. Si les modifications sont incohérentes (par exemple, deux fichiers portent le même nom), il sera abandonné sans rien toucher. Il gère également les renommage circulaires correctement.

Je fais habituellement:

$ qmv -f do

pour qu'il ne montre qu'une colonne de noms (do: destination-only). Voici à quoi ça ressemble:

SivouslecombinezavecplusieurscurseursdecodeSublimeText,AtomouVisualStudio,vousobtenezunoutiltrèsagréableetpuissantpourrenommerenbloc.Parexemple,pourAtom,vousferiezEDITOR="atom -w" qmv -f do .

    
réponse donnée ateijelo 21.10.2016 - 20:36
la source
22

Utilisez rename ...

rename -n 's/^([0-9]+\.[0-9]\.[0-9]+\.[0-9]+_[0-9]+_)([0-9]+)_([0-9]+)_([0-9]+)\.jpg/$1$2$3$4_TIMING\.jpg/' *

Avec -n , ceci affichera ce qu'il va faire sans apporter de modifications:

rename(10.3.100.179_01_20161018_230014_5335.jpg, 10.3.100.179_01_201610182300145335_TIMING.jpg)
rename(10.3.100.179_01_20161018_231514_0814.jpg, 10.3.100.179_01_201610182315140814_TIMING.jpg)
rename(10.3.100.179_01_20161018_233014_5706.jpg, 10.3.100.179_01_201610182330145706_TIMING.jpg)
rename(10.3.100.179_01_20161018_234514_0896.jpg, 10.3.100.179_01_201610182345140896_TIMING.jpg)

Si cela vous semble correct, supprimez le -n

$ rename 's/^([0-9]+\.[0-9]\.[0-9]+\.[0-9]+_[0-9]+_)([0-9]+)_([0-9]+)_([0-9]+)\.jpg/$1$2$3$4_TIMING\.jpg/' *
$ ls
10.3.100.179_01_201610182300145335_TIMING.jpg  10.3.100.179_01_201610182330145706_TIMING.jpg
10.3.100.179_01_201610182315140814_TIMING.jpg  10.3.100.179_01_201610182345140896_TIMING.jpg

Expliquer ...

  • s/something/something_else/ rechercher et remplacer
  • ^ le début du nom (ancrage)
  • [0-9] n'importe quel nombre
  • + un ou plusieurs caractères précédents
  • \. littéral . (sans \ cela correspond à aucun caractère)
  • () pour conserver cette partie
  • $1$2$3$3 en arrière des références aux choses déjà trouvées et conservées avec ()

Remarque: le * situé à la fin de la commande correspond à tous les fichiers visibles du répertoire en cours. Utilisez un glob plus approprié si nécessaire.

    
réponse donnée Zanna 21.10.2016 - 09:03
la source
11

mmv peut le faire comme suit:

mmv '*_*_*_*_*.jpg' '#1_#2_#3#4#5_TIMING.jpg'

10.3.100.179_01_20161018_230014_5335.jpg 10.3.100.179_01_201610182300145335_TIMING.jpg

N ° 1, N ° 2, N ° 3, ... fait référence ici à chacun des '*' correspondants.

Il est encore plus court avec:

mmv '*_*_*.jpg' '#1#2#3_TIMING.jpg'
    
réponse donnée αғsнιη 21.10.2016 - 09:37
la source
8

Une autre approche rename :

$ rename -n 's/(.*)_(.*)_(.*)\./$1$2$3_TIMING./' *
10.3.100.179_01_20161018_230014_5335.jpg -> 10.3.100.179_01_201610182300145335_TIMING.jpg
10.3.100.179_01_20161018_230114_5395.jpg -> 10.3.100.179_01_201610182301145395_TIMING.jpg
10.3.100.179_01_20161018_230114_5492.jpg -> 10.3.100.179_01_201610182301145492_TIMING.jpg
10.3.100.179_01_20161018_230214_5630.jpg -> 10.3.100.179_01_201610182302145630_TIMING.jpg
10.3.100.179_01_20161018_231514_0814.jpg -> 10.3.100.179_01_201610182315140814_TIMING.jpg
10.3.100.179_01_20161018_231614_1145.jpg -> 10.3.100.179_01_201610182316141145_TIMING.jpg
10.3.100.179_01_20161018_231614_1264.jpg -> 10.3.100.179_01_201610182316141264_TIMING.jpg
10.3.100.179_01_20161018_231714_7135.jpg -> 10.3.100.179_01_201610182317147135_TIMING.jpg
10.3.100.179_01_20161018_233014_5706.jpg -> 10.3.100.179_01_201610182330145706_TIMING.jpg
10.3.100.179_01_20161018_233114_6047.jpg -> 10.3.100.179_01_201610182331146047_TIMING.jpg
10.3.100.179_01_20161018_233114_6146.jpg -> 10.3.100.179_01_201610182331146146_TIMING.jpg
10.3.100.179_01_20161018_234514_0896.jpg -> 10.3.100.179_01_201610182345140896_TIMING.jpg
10.3.100.179_01_20161018_234614_0547.jpg -> 10.3.100.179_01_201610182346140547_TIMING.jpg
10.3.100.179_01_20161018_234614_0658.jpg -> 10.3.100.179_01_201610182346140658_TIMING.jpg

Si cela semble fonctionner comme vous le souhaitez, supprimez le -n .

    
réponse donnée terdon 21.10.2016 - 11:26
la source
5

Vous pouvez également utiliser les éléments suivants. Commencez par sauvegarder vos fichiers et essayez ceci:

find . -name "*.jpg" -type f -print0| while read -d $'
[email protected]$ ls -lart
total 8
drwxrwxr-x 6 user user 4096 Oct 21 10:21 ..
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_20161018_230014_5335.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_20161018_231514_0814.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_20161018_233014_5706.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_20161018_234514_0896.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_20161018_230114_5395.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_20161018_231614_1145.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_20161018_233114_6047.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_20161018_234614_0547.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_20161018_230114_5492.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_20161018_231614_1264.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_20161018_233114_6146.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_20161018_234614_0658.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_20161018_230214_5630.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_20161018_231714_7135.jpg
drwxrwxr-x 2 user user 4096 Oct 21 10:30 .

[email protected]$ find . -name "*.jpg" -type f -print0 | while read -d $'
find . -name "*.jpg" -type f -print0| while read -d $'
[email protected]$ ls -lart
total 8
drwxrwxr-x 6 user user 4096 Oct 21 10:21 ..
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_20161018_230014_5335.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_20161018_231514_0814.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_20161018_233014_5706.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_20161018_234514_0896.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_20161018_230114_5395.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_20161018_231614_1145.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_20161018_233114_6047.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_20161018_234614_0547.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_20161018_230114_5492.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_20161018_231614_1264.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_20161018_233114_6146.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_20161018_234614_0658.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_20161018_230214_5630.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_20161018_231714_7135.jpg
drwxrwxr-x 2 user user 4096 Oct 21 10:30 .

[email protected]$ find . -name "*.jpg" -type f -print0 | while read -d $'%pre%' file
> do
>  newfilename=$(echo "${file%.*}" | sed 's/\(.*\)_\(.*\)_//')
>  mv $file $newfilename"_TIMING.jpg"
> done

10:35:20 t $ ls -lart
total 8
drwxrwxr-x 6 user user 4096 Oct 21 10:21 ..
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_201610182300145335_TIMING.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_201610182315140814_TIMING.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_201610182330145706_TIMING.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_201610182345140896_TIMING.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_201610182301145395_TIMING.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_201610182316141145_TIMING.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_201610182331146047_TIMING.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_201610182346140547_TIMING.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_201610182301145492_TIMING.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_201610182316141264_TIMING.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_201610182331146146_TIMING.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_201610182346140658_TIMING.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_201610182302145630_TIMING.jpg
-rw-rw-r-- 1 user user    0 Oct 21 10:30 10.3.100.179_01_201610182317147135_TIMING.jpg
drwxrwxr-x 2 user user 4096 Oct 21 10:35 .
' file do #extension="${file##*.}" newfilename=$(echo "${file%.*}" | sed 's/\(.*\)_\(.*\)_//') mv "$file" "$newfilename""_TIMING.jpg" done
' file > do > newfilename=$(echo "${file%.*}" | sed 's/\(.*\)_\(.*\)_//') > mv $file $newfilename"_TIMING.jpg" > done 10:35:20 t $ ls -lart total 8 drwxrwxr-x 6 user user 4096 Oct 21 10:21 .. -rw-rw-r-- 1 user user 0 Oct 21 10:30 10.3.100.179_01_201610182300145335_TIMING.jpg -rw-rw-r-- 1 user user 0 Oct 21 10:30 10.3.100.179_01_201610182315140814_TIMING.jpg -rw-rw-r-- 1 user user 0 Oct 21 10:30 10.3.100.179_01_201610182330145706_TIMING.jpg -rw-rw-r-- 1 user user 0 Oct 21 10:30 10.3.100.179_01_201610182345140896_TIMING.jpg -rw-rw-r-- 1 user user 0 Oct 21 10:30 10.3.100.179_01_201610182301145395_TIMING.jpg -rw-rw-r-- 1 user user 0 Oct 21 10:30 10.3.100.179_01_201610182316141145_TIMING.jpg -rw-rw-r-- 1 user user 0 Oct 21 10:30 10.3.100.179_01_201610182331146047_TIMING.jpg -rw-rw-r-- 1 user user 0 Oct 21 10:30 10.3.100.179_01_201610182346140547_TIMING.jpg -rw-rw-r-- 1 user user 0 Oct 21 10:30 10.3.100.179_01_201610182301145492_TIMING.jpg -rw-rw-r-- 1 user user 0 Oct 21 10:30 10.3.100.179_01_201610182316141264_TIMING.jpg -rw-rw-r-- 1 user user 0 Oct 21 10:30 10.3.100.179_01_201610182331146146_TIMING.jpg -rw-rw-r-- 1 user user 0 Oct 21 10:30 10.3.100.179_01_201610182346140658_TIMING.jpg -rw-rw-r-- 1 user user 0 Oct 21 10:30 10.3.100.179_01_201610182302145630_TIMING.jpg -rw-rw-r-- 1 user user 0 Oct 21 10:30 10.3.100.179_01_201610182317147135_TIMING.jpg drwxrwxr-x 2 user user 4096 Oct 21 10:35 .
' file do #extension="${file##*.}" newfilename=$(echo "${file%.*}" | sed 's/\(.*\)_\(.*\)_//') mv "$file" "$newfilename""_TIMING.jpg" done

sed 's/\(.*\)_\(.*\)_//') supprime les caractères _ de l'horodatage.

Par exemple:

%pre%     
réponse donnée Mustafa DOGRU 21.10.2016 - 09:23
la source
2

Vous avez probablement terminé, mais voici une (simple) solution bash :
Est-ce que "simple ... solution bash" est un oxymoron?

#!/bin/bash

#loop through all files ending in .jpg
for f in *.jpg;
do

    #cut out everything to the timestamp
    firsthalf=${f%_*_*_*}

    #get from the timestamp on
    lasthalf=${f#*_*_}

    #remove (all) underscores from timestamp
    #note the 2 forward slashes...
    lasthalf=${lasthalf//_/}

    #get our extension
    ext=${lasthalf##*.}

    #now we can remove the extension
    lasthalf=${lasthalf%.*}

    #rename the file
    #change 'mv' to 'echo' if you want to do a trial run first...
    mv "$f" "${firsthalf}_${lasthalf}_TIMING.${ext}"

done;

PS: la logique de la boucle a été testée avec l'un de vos exemples de noms de fichiers. C'est passé.

    
réponse donnée Jefré N. 21.10.2016 - 23:10
la source
1

Si vous pouviez utiliser l'interface graphique, je recommanderais pyRenamer .

Il est présent dans la plupart des distributions, par exemple. dans Ubuntu:

sudo apt-get install pyrenamer

Il peut faire tout ce que vous voulez et plus encore.

  • Il peut utiliser des modèles, ajouter ou supprimer du texte.
  • Il peut accéder aux données EXIF si vous renommez des photos, vous pouvez ainsi générer des motifs basés sur la date / heure, etc.
  • Peut utiliser certaines métadonnées si vous renommez des fichiers de musique.
  • De plus, il dispose d'un aperçu qui permet d'éviter certaines erreurs difficiles à rétablir.
réponse donnée jrierab 21.10.2016 - 17:18
la source
0

Voici votre fonction intégrée find + xargs + sed + strong> mv oneliner (amoureux de la peau):

find . -name "*.jpg" -print0 | sort -z | xargs -0 sh -c 'for filename; do mv "$filename" $(echo "${filename}" | sed "s/\([0-9]\{8\}\)_\([0-9]\{6\}\)_\([0-9]\{4\}\)/_TIMING/g"); done' sh

Explication:

  • find . -name "*.jpg" | sort | xargs sh -c <command> sh : liste tous les fichiers JPEG du répertoire en cours, puis exécute une commande shell pour chacun d'eux (le tri est facultatif bien sûr, mais gardez les choses un peu plus propres si vous vous connectez quelque part)

  • -print0 , -z , -0 : c'est une bonne habitude de séparer les éléments avec le% binaire 0 lorsque vous nommez des noms de fichiers pour éviter les problèmes d'espaces au centre (pas votre cas) bien que)

  • mv "$filename" $(echo "${filename}" | sed "s/\([0-9]\{8\}\)_\([0-9]\{6\}\)_\([0-9]\{4\}\)/_TIMING/g"); : (les barres obliques inverses dans l'expression rationnelle de sed ne facilitent pas sa lisibilité, mais c'est simple ") renommez chaque fichier en remplaçant la séquence de 8 séparations par un soulignement + 6 + 4 chiffres avec leur concaténation contiguë plus ce _TIMING chose ( \i est une référence arrière du groupe i -th regex).

Réf.: Xargs - man sed

    
réponse donnée Campa 26.10.2016 - 09:52
la source

Lire d'autres questions sur les étiquettes