web-dev-qa-db-fra.com

Comment renommer des fichiers dans des sous-répertoires?

Existe-t-il un moyen de renommer des fichiers par lots dans des sous-répertoires?

Par exemple:

Renommer *.html à *.htm dans un dossier contenant des répertoires et des sous-répertoires.

39
Shoban

Invite de commandes Windows: (si à l'intérieur d'un fichier de commandes, remplacez% x par %% x)

for /r %x in (*.html) do ren "%x" *.htm

Cela fonctionne également pour renommer le milieu des fichiers

for /r %x in (website*.html) do ren "%x" site*.htm
74
Anonymous

Pour Windows, c'est le meilleur outil que j'ai trouvé:

http://www.1-4a.com/rename/

Il peut tout faire ET a l'évier de cuisine avec lui.

Pour Linux, vous avez une pléthore de langages de script et de shells pour vous aider, comme les réponses précédentes.

8
moogs
find . -regex ".*html$" | while read line;
 do 
    A=`basename ${line} | sed 's/html$/htm/g'`;
    B=`dirname ${line}`;
    mv ${line} "${B}/${A}";
 done
6
Aditya Mukherji

En python

import os

target_dir = "."

for path, dirs, files in os.walk(target_dir):
    for file in files:
        filename, ext = os.path.splitext(file)
        new_file = filename + ".htm"

        if ext == '.html':
            old_filepath = os.path.join(path, file)
            new_filepath = os.path.join(path, new_file)
            os.rename(old_filepath, new_filepath)
5
monkut

Dans Bash, vous pouvez effectuer les opérations suivantes:

for x in $(find . -name \*.html); do
  mv $x $(echo "$x" | sed 's/\.html$/.htm/')
done
3
Adam Rosenfield

Je suis sûr qu'il existe une manière plus élégante, mais voici la première chose qui m'est venue à l'esprit:

for f in $(find . -type f -name '*.html'); do 
    mv $f $(echo "$f" | sed 's/html$/htm/')
done
2
albertb

Si vous avez des forfiles (il est livré avec Windows XP et 2003 et des choses plus récentes, je pense), vous pouvez exécuter:

forfiles/S/M * .HTM/C "cmd/c ren @file * .HTML"

2
BBX

Total Commander qui est une application de gestion de fichiers, vous permet de lister et de sélectionner tous les fichiers dans ses répertoires et sous-répertoires, puis vous pouvez exécuter n'importe laquelle des opérations de total commander sur eux. l'un d'eux étant: multi-renommer les fichiers sélectionnés.

1
nightryde

Sous Linux, vous pouvez utiliser la commande ' rename ' pour renommer les fichiers par lots.

1
ayaz

Pour Windows, j'ai fait un solution pratique VBScript litte avec un renommage basé sur regex et un support Drag & Drop. Essayez-le si vous le souhaitez - placez-le dans un fichier vbs et déposez-y votre dossier dans l'Explorateur.

0
Tomalak

Sous Unix, vous pouvez utiliser rnm :

rnm -rs '/\.html$/.htm/' -fo -dp -1 *

Ou

rnm -ns '/n/.htm' -ss '\.html$' -fo -dp -1 *

Explication:

  1. -ns: chaîne de nom (nouveau nom). /n/ est une règle de chaîne de nom qui se développe en nom de fichier sans l'extension.
  2. -ss: chaîne de recherche (expression régulière). Recherche des fichiers avec correspondance.
  3. -rs: remplace la chaîne de la forme /search_regex/replace_part/modifier
  4. -fo: mode fichier uniquement
  5. -dp: profondeur du répertoire (-1 signifie illimité).
0
Jahid

Sous Windows, vous pouvez découvrir l'application open source C # renamer de fichiers en vrac dans https: // filerenamer.codeplex.com fonctionne avec un simple fichier Excel . Donnez un fichier Excel avec deux colonnes source et destination à cette application et c'est fait.

0

Sous Windows, The Rename fait un très bon travail à cela. Freeware, mais pas open source.

0
lImbus

AWK sur Linux. Pour le premier répertoire, voici votre réponse ... Extrapolez en appelant récursivement awk sur dir_path peut-être en écrivant un autre awk qui écrit cet awk exact ci-dessous ... et ainsi de suite.

ls dir_path/. | awk -F"." '{print "mv file_name/"$0" dir_path/"$1".new_extension"}' |csh
0
Alex