web-dev-qa-db-fra.com

comment changer les extensions de fichiers dans un répertoire

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.

4
vishal

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
9
A.B.
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.

0
vishal

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
0
heemayl