J'ai beaucoup de fichiers dans un répertoire ayant une extension.
.text(2)
.text(1)
Je veux supprimer les numéros de l'extension et la sortie devrait être comme
.text
.text
Quelqu'un peut-il m'aider s'il vous plaît avec le script Shell pour cela? J'utilise CentOs 6.3.
Démarrez one-liner dans le dossier où les fichiers sont enregistrés ou modifiez le chemin de la commande find
. Dans les exemples suivants, find .
le chemin est .
(point).
Test avec:
find . -type f -print0 | xargs -I{} -0 rename -v -n 's/\([0-9]+\)$//' {}
Renommer avec:
find . -type f -print0 | xargs -I{} -0 rename -v 's/\([0-9]+\)$//' {}
La commande trouve tous les fichiers de manière récursive et supprime toutes les occurrences de (<any_number>)
à la fin du nom de fichier.
Supprimez le $
dans 's/\([0-9]+\)$//'
pour supprimer toutes les occurrences quelque part dans le nom du fichier, par exemple:
find . -type f -print0 | xargs -I{} -0 rename -v 's/\([0-9]+\)//' {}
Exemple:
% ls -oga
-rw-rw-r-- 1 0 Jun 10 09:34 .foo(1)
-rw-rw-r-- 1 0 Jun 10 09:34 .bar(2)
% find . -type f -print0 | xargs -I{} -0 rename -v 's/\([0-9]+\)$//' {}
% ls -aog
-rw-rw-r-- 1 0 Jun 10 09:34 .foo
-rw-rw-r-- 1 0 Jun 10 09:34 .bar
for i in *.text*; do mv "$i" "$(echo "$i" | sed 's/([0-9]\{1,\})$//')"; done
juste besoin de changer l'extension (.text ou toute autre extension) en fonction des besoins.
Utiliser python
:
#!/usr/bin/env python2
import os, re
for root, dirs, files in os.walk('/path/to/directory'):
for f in files:
oldname = os.path.join(root, f)
newname = os.path.join(root, re.search(r'(?<=/)[^/]+(?=\(\d+\)$)', oldname).group())
os.rename(oldname, newname)
Considérant que la première partie des noms de fichiers est différente (comme vous l'avez déjà mentionné), aucune chance d'écraser.
os.walk
traversera tous les sous-répertoires du répertoire mentionné
oldname
contiendra le nom du fichier à modifier. os.path.join
ajoutera le nom de fichier avec le chemin de répertoire de os.path.join
newname
contiendra le nom en lequel oldname
sera remplacé. Ici, nous avons utilisé le module re
pour obtenir le nom du fichier, puis ajouté le nom du fichier au chemin du répertoire par os.path.join
os.rename
renommera simplement les fichiers en conséquence.
Avant:
foo
├── 1 spam.text(1)
├── 1.text(23)
└── bar
├── 1 Egg.text(10)
└── 3test.text(5)
Après:
foo
├── 1 spam.text
├── 1.text
└── bar
├── 1 Egg.text
└── 3test.text