web-dev-qa-db-fra.com

Renommer des fichiers pour supprimer du texte après le point

J'ai ces fichiers:

JE.TR21201610011612514806.47250728
JE.TR21201610011613514807.91514463
JE.TR21201610011614514808.4107721050
JE.TR21201610011626514818.3578493139
JE.TR21201610011627514819.1032212591
JE.TR21201610011628514820.3663420052
JE.TR21201610011629514821.3388683091

Comment puis-je les renommer?

JE.TR21201610011612514806
JE.TR21201610011613514807
JE.TR21201610011614514808
JE.TR21201610011624514817
JE.TR21201610011626514818
JE.TR21201610011627514819
JE.TR21201610011628514820
JE.TR21201610011629514821
2
jeanBrooklyn

N'importe quel

$ rename -n 's/\.\d*$//' JE.*
rename(JE.TR21201610011612514806.47250728, JE.TR21201610011612514806)
rename(JE.TR21201610011613514807.91514463, JE.TR21201610011613514807)
rename(JE.TR21201610011614514808.4107721050, JE.TR21201610011614514808)
rename(JE.TR21201610011626514818.3578493139, JE.TR21201610011626514818)
rename(JE.TR21201610011627514819.1032212591, JE.TR21201610011627514819)
rename(JE.TR21201610011628514820.3663420052, JE.TR21201610011628514820)
rename(JE.TR21201610011629514821.3388683091, JE.TR21201610011629514821)

ou

$ prename -n 's/\.\d*$//' JE.*
JE.TR21201610011612514806.47250728 renamed as JE.TR21201610011612514806
JE.TR21201610011613514807.91514463 renamed as JE.TR21201610011613514807
JE.TR21201610011614514808.4107721050 renamed as JE.TR21201610011614514808
JE.TR21201610011626514818.3578493139 renamed as JE.TR21201610011626514818
JE.TR21201610011627514819.1032212591 renamed as JE.TR21201610011627514819
JE.TR21201610011628514820.3663420052 renamed as JE.TR21201610011628514820
JE.TR21201610011629514821.3388683091 renamed as JE.TR21201610011629514821

ou

$ mmv -n "JE.*.*" JE.#1
JE.TR21201610011612514806.47250728 -> JE.TR21201610011612514806
JE.TR21201610011613514807.91514463 -> JE.TR21201610011613514807
JE.TR21201610011614514808.4107721050 -> JE.TR21201610011614514808
JE.TR21201610011626514818.3578493139 -> JE.TR21201610011626514818
JE.TR21201610011627514819.1032212591 -> JE.TR21201610011627514819
JE.TR21201610011628514820.3663420052 -> JE.TR21201610011628514820
JE.TR21201610011629514821.3388683091 -> JE.TR21201610011629514821

(retirez le -n pour terminer l'action)

ou

$ for f in JE.*; do echo mv "$f" "${f%.*([0-9])}"; done
mv JE.TR21201610011612514806.47250728 JE.TR21201610011612514806
mv JE.TR21201610011613514807.91514463 JE.TR21201610011613514807
mv JE.TR21201610011614514808.4107721050 JE.TR21201610011614514808
mv JE.TR21201610011626514818.3578493139 JE.TR21201610011626514818
mv JE.TR21201610011627514819.1032212591 JE.TR21201610011627514819
mv JE.TR21201610011628514820.3663420052 JE.TR21201610011628514820
mv JE.TR21201610011629514821.3388683091 JE.TR21201610011629514821

(retirez la echo pour terminer l'action).

8
steeldriver

Voici un moyen rapide de le faire en Python:

$ tree
.
├── JE.TR21201610011612514806.47250728
├── JE.TR21201610011613514807.91514463
├── JE.TR21201610011614514808.4107721050
├── JE.TR21201610011626514818.3578493139
├── JE.TR21201610011627514819.1032212591
├── JE.TR21201610011628514820.3663420052
└── JE.TR21201610011629514821.3388683091

0 directories, 7 files
$ python -c 'import os,sys; map(lambda x: os.rename(x,x[0:x.rfind(".")]) , sys.argv[1:])' JE.*  
$ tree
.
├── JE.TR21201610011612514806
├── JE.TR21201610011613514807
├── JE.TR21201610011614514808
├── JE.TR21201610011626514818
├── JE.TR21201610011627514819
├── JE.TR21201610011628514820
└── JE.TR21201610011629514821

Il y a quelques points clés sur la façon dont cela fonctionne:

  • nous passons tous les noms de fichiers via JE.* glob, puis nous y référons via sys.argv[1:].
  • map() nous permet d'exécuter la fonction lambda sur tout ce qui se trouve dans la tranche de liste sys.argv[1:].
  • la fonction lambda que nous avons ici utilise la fonction os.rename(old,new) pour renommer chaque élément de la liste
  • x[0:x.rfind(".")] est en fait une tranche (ou une sous-chaîne). En utilisant la fonction .rfind(), nous trouvons l'index de la première occurrence de . en partant du côté droit de la chaîne (c'est-à-dire en partant de la fin). Ainsi, la tranche de liste peut être lue comme x[0:<index of the last dot>]
1
Sergiy Kolodyazhnyy

Un moyen simple de renommer des fichiers et des dossiers consiste à utiliser la commande mv (abrégée de "move"). Son objectif principal est de déplacer des fichiers et des dossiers, mais il peut également les renommer, car le fait de renommer un fichier est interprété par le système de fichiers comme un transfert d'un nom à un autre.

La syntaxe est la suivante:

mv (option) file1.ext file2.ext

file1.ext est l'ancien nom du fichier et file2.ext, le nouveau nom.

0
Arpit Gaurav

Une commande que j'utilise assez souvent est: vidir. vi ou vim pour les fichiers et vidir pour les répertoires.

Si vous exécutez vidir et obtenez une commande introuvable , vous devez installer le package moreutils :

Sudo apt-get install moreutils

Retour à votre cas:

  1. Allez dans le répertoire où les fichiers sont: cd path-to-files
  2. Tapez la commande: vidir et appuyez sur ENTREE
  3. Maintenant, vous verrez toute la liste avec tous les fichiers, tapez cette commande: :1,$ s/\.\d*$//g (il recherche un point suivi de chiffres et supprime tout jusqu'à la fin)
  4. Pour quitter et sauvegarder, tapez: :x

Voir aussi http://vimregex.com/

0
koni_raid