2008-10-29 11 views
34

Y a-t-il un moyen de renommer les fichiers par lots dans les sous-répertoires?Renommer les fichiers dans les sous-répertoires

Exemple:

Renommer * .html * .htm dans un dossier qui a des répertoires et sous-répertoires.

+0

Dans quelle langue? –

+0

Par lot, voulez-vous dire "lot à la fois" ou de manière .bat/.cmd/.sh? Le premier n'est pas une question de programmation, et sur Windows, il y a des tonnes d'utilitaires gratuits pour cela. Ces derniers ont besoin de plus de précision, au moins quel OS vous ciblez. – PhiLho

Répondre

67

invite de commande Windows: (Si l'intérieur d'un fichier de commandes, changer% x à %% 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 
+3

Ne fonctionne pas si le nom du répertoire contient des espaces – raven

+1

@raven maintenant cela devrait fonctionner –

+2

Notamment, cela fonctionne également pour renommer juste la partie centrale du fichier. Donc, si tous vos fichiers ont commencé avec le site web ... et terminé avec .html, et vous vouliez les renommer pour commencer avec le site ainsi que changer l'extension, vous pouvez faire: 'pour/r% x dans (site web * .html) faire ren"% x "site * .htm' – jonnybot

3

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 
2

Je suis sûr qu'il ya une façon plus élégante, mais voici la première chose qui a sauté dans ma tête:

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

Pour les fenêtres , c'est le meilleur outil que j'ai trouvé:

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

Il peut faire quoi que ce soit ET a la cuisine évier avec elle. Pour Linux, vous avez une pléthore de langages de script et de shells pour vous aider, comme les réponses précédentes.

+0

Le script Perl que j'ai posté fonctionne sur Windows (testé sur Windows). –

+1

@BKB La plupart des installations Windows ne sont pas fournies avec perl. et il semble absurde d'installer perl juste pour renommer les répertoires. C'est une solution à faible barrière – moogs

+0

Donc installer une application qui ne peut que renommer des fichiers est moins absurde que d'installer quelque chose d'aussi puissant que perl? – RJFalconer

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

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) 
1

Sur Linux, vous pouvez utilisez la commande 'rename' pour renommer les fichiers par lots.

0

AWK sous 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 exactement ce awk ci-dessous ... et ainsi de suite.

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

Pour Windows, je l'ai fait un convenient litte VBScript solution avec changement de nom basé sur les expressions régulières et faites glisser & Drop support. Essayez-le si vous voulez - mettez-le dans un fichier vbs et déposez-y votre dossier dans l'Explorateur.

1
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! 
0

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

2

Si vous avez forfiles (il est livré avec Windows XP et 2003 et plus récents trucs que je pense) vous pouvez exécuter:

forfiles/S/M * .htm/C « cmd/c * s @file. HTML »

+0

Voici d'autres exemples avec forfiles: https://www.windows-commandline.com/rename-file-extensions-bulk/ –

1

Total Commander qui est une application de gestionnaire de fichiers, vous permet de lister & sélectionner tous les fichiers au sein de ses sous-dir & dirs, vous pouvez exécuter l'une des opérations totales de commandant sur eux. l'un d'entre eux étant: renommer plusieurs fois les fichiers sélectionnés.

0

Sous Windows, vous pouvez trouver l'application opensource simples C# fichier en vrac Renamer 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

Sur 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 s'étend au nom de fichier sans l'extension.
  2. -ss: chaîne de recherche (regex). Recherche les fichiers avec correspondance.
  3. -rs: remplacer chaîne de la forme /search_regex/replace_part/modifier
  4. -fo: déposer seul mode
  5. -dp: profondeur de répertoire (-1 signifie illimité).
+0

aucune commande de ce type sur ubuntu –

Questions connexes