2008-10-29 11 views
34

¿Hay alguna manera de cambiar el nombre de los archivos por lotes en los subdirectorios?Cambiar el nombre de los archivos en los subdirectorios

Ejemplo:

Cambiar nombre * .html a * .htm en una carpeta que tiene los directorios y subdirectorios.

+0

¿En qué idioma? –

+0

Por lote, ¿quiere decir "lote a la vez" o en una forma .bat/.cmd/.sh? El primero no es una cuestión de programación, y en Windows, hay toneladas de utilidades gratuitas para eso. Este último necesita más precisión, al menos a qué sistema operativo se dirige. – PhiLho

Respuesta

67

símbolo del sistema de Windows: (Si dentro de un archivo por lotes, cambiar x% a %% x)

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

Esto también funciona para cambiar el nombre del medio de los archivos

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

Esto doesn No funciona si el nombre del directorio tiene espacios. – raven

+1

@raven ahora debería funcionar –

+2

Notablemente, esto también funciona para cambiar el nombre de la parte central del archivo. Por lo tanto, si todos sus archivos comenzaron con el sitio web ... y terminaron con .html, y desea cambiarles el nombre para comenzar con el sitio, así como cambiar la extensión, puede hacer: 'para/r% x en (sitio web * .html) do ren"% x "sitio * .htm' – jonnybot

3

En Bash, se puede hacer lo siguiente:

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

Estoy seguro de que hay una forma más elegante, pero aquí es el primero que me vino en mi cabeza:

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

para ventanas , esta es la mejor herramienta que he encontrado:

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

se puede hacer cualquier cosa Y tiene el fregadero de la cocina con ella.

Para Linux, tiene una gran cantidad de lenguajes de scripting y shells para ayudarlo, al igual que las respuestas anteriores.

+0

El script de Perl que publiqué funciona en Windows (lo probé en Windows). –

+1

@BKB la mayoría de las instalaciones de Windows no vienen con perl. y parece absurdo instalar Perl solo para cambiar el nombre de los directorios. esta es una solución de barrera baja – moogs

+0

¿Entonces instalar una aplicación que solo puede cambiar el nombre de los archivos es menos absurdo que instalar algo tan poderoso como 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

En Linux, es posible utilice el comando 'rename' para cambiar el nombre de los archivos por lotes.

0

AWK en Linux. Para el primer directorio, esta es su respuesta ... Extrapolar llamando de manera recursiva a awk en dir_path quizás escribiendo otro awk que escriba este awk exacto a continuación ... y así sucesivamente.

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

Para Windows, he hecho un convenient litte VBScript solution con el cambio de nombre basado en expresiones regulares y arrastre & soltar apoyo. Pruébelo si lo desea; colóquelo en un archivo vbs y colóquelo en el Explorador.

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

En Windows, The Rename hace un trabajo bastante bueno en eso. Freeware, pero no de código abierto.

2

Si tiene forfiles (que viene con Windows XP y 2003 y las nuevas cosas creo) que puede funcionar:

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

+0

Aquí hay más ejemplos con forfiles: https://www.windows-commandline.com/rename-file-extensions-bulk/ –

1

Total Commander que es una aplicación de administrador de archivos, permite obtener una lista & seleccionar todos los archivos dentro de sus dir & sub-directorios, a continuación, puede ejecutar cualquiera de las operaciones totales comandante en ellos. uno de ellos es: cambiar el nombre de los archivos seleccionados.

0

En Windows, se puede encontrar opensource sencilla C# archivos a granel Renamer aplicación en https://filerenamer.codeplex.com obras con un simple archivo de Excel . Proporcione un archivo de Excel con dos columnas fuente y destino a esta aplicación y listo.

0

En Unix, puede utilizar rnm:

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

O

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

Explicación:

  1. -ns: string name (nombre nuevo). /n/ es una regla de cadena de nombre que se expande al nombre de archivo sin la extensión.
  2. -ss: cadena de búsqueda (regex). Busca archivos con coincidencias.
  3. -rs: sustituir cadena de la forma /search_regex/replace_part/modifier
  4. -fo: archivo único modo
  5. -dp: profundidad del directorio (-1 significa sin límite).
+0

no existe dicho comando en ubuntu –

Cuestiones relacionadas