Question

Est-il possible de renommer par lots des fichiers dans des sous-répertoires?

Par exemple:

Renommez *. html en *. htm dans un dossier contenant des répertoires et des sous-répertoires.

Était-ce utile?

La solution

Invite de commande Windows: (si vous vous trouvez dans un fichier de commandes, remplacez% x par %% x)

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

Ceci fonctionne aussi pour renommer le milieu des fichiers

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

Autres conseils

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

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

Il peut tout faire ET contient l'évier de la cuisine.

Pour Linux, vous avez une pléthore de langages de script et de shells pour vous aider, à l'instar des réponses précédentes.

find . -regex ".*html<*>quot; | while read line;
 do 
    A=`basename ${line} | sed 's/html$/htm/g'`;
    B=`dirname ${line}`;
    mv ${line} "${B}/${A}";
 done

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)

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

Je suis sûr qu'il existe un moyen plus élégant, 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

Si vous avez des fichiers forfile (fournis avec Windows XP et 2003 et des versions plus récentes, je pense), vous pouvez exécuter:

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

Sous Linux, vous pouvez utiliser la commande " rename " pour renommer des fichiers en lot.

In bash use command rename :)

 rename 's/\.htm$/.html/' *.htm

 # or

 find . -name '*.txt' -print0 | xargs -0 rename 's/.txt$/.xml/'

 #Obs1: Above I use regex \. --> literal '.'  and  $ --> end of line
 #Obs2: Use find -maxdepht 'value' for determine how recursive is
 #Obs3: Use -print0 to avoid 'names spaces asdfa' crash!

Total Commander , qui est une application de gestion de fichiers, vous permet de répertorier & amp; sélectionner tous les fichiers dans son répertoire dir & amp; sous-répertoires, vous pouvez alors exécuter n’importe laquelle des opérations du commandant. l’un d’eux étant: renommez plusieurs fois les fichiers sélectionnés.

AWK sous Linux. Pour le premier répertoire, c’est 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/"<*>" dir_path/"$1".new_extension"}' |csh

Pour Windows, j'ai créé une solution pratique VBScript plus récente avec un changement de nom et une extension Drag & amp basée sur regex. ; Supprimez le support. Essayez si vous le souhaitez - mettez-le dans un fichier vbs et déposez votre dossier dessus dans l'explorateur.

Sous Windows, Renommer effectue une assez bon travail à cela. Freeware, mais pas open source.

Sous Windows, vous pouvez trouver une application opensource simple C # Renamer de fichier en bloc 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.

Sous Unix, vous pouvez utiliser rnm :

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

Ou

rnm -ns '/n/.htm' -ss '\.html

Explication:

  1. -ns : chaîne de nom (nouveau nom). / n / est une règle de chaîne de noms qui s'étend au nom de fichier sans l'extension.
  2. -ss : chaîne de recherche (regex). Recherche les fichiers avec correspondance.
  3. -rs : chaîne de remplacement de la forme / search_regex / replace_part / modificateur
  4. -fo : mode fichier uniquement
  5. -dp : profondeur du répertoire (-1 signifie illimité).
-fo -dp -1 *

Explication:

  1. -ns : chaîne de nom (nouveau nom). / n / est une règle de chaîne de noms qui s'étend au nom de fichier sans l'extension.
  2. -ss : chaîne de recherche (regex). Recherche les fichiers avec correspondance.
  3. -rs : chaîne de remplacement de la forme / search_regex / replace_part / modificateur
  4. -fo : mode fichier uniquement
  5. -dp : profondeur du répertoire (-1 signifie illimité).
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top