¿Cómo renombro archivos en subdirectorios?
-
05-07-2019 - |
Pregunta
¿Hay alguna forma de renombrar archivos por lotes en subdirectorios?
Por ejemplo:
Cambie el nombre de * .html
a * .htm
en una carpeta que tenga directorios y subdirectorios.
Solución
Símbolo del sistema de Windows: (si está dentro de un archivo por lotes, cambie% x a %% x)
for /r %x in (*.html) do ren "%x" *.htm
Esto también funciona para cambiar el nombre de la mitad de los archivos
for /r %x in (website*.html) do ren "%x" site*.htm
Otros consejos
Para Windows, esta es la mejor herramienta que he encontrado:
Puede hacer cualquier cosa Y tiene el fregadero de la cocina.
Para Linux, tienes una gran cantidad de lenguajes de scripting y shells para ayudarte, como las respuestas anteriores.
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)
En Bash, puedes hacer lo siguiente:
for x in $(find . -name \*.html); do
mv $x $(echo "$x" | sed 's/\.html$/.htm/')
done
Estoy seguro de que hay una forma más elegante, pero esto es lo primero que me vino a la cabeza:
for f in $(find . -type f -name '*.html'); do
mv $f $(echo "$f" | sed 's/html$/htm/')
done
Si tiene archivos for (creo que viene con Windows XP y 2003 y más nuevos), puede ejecutar:
forfiles / S / M * .HTM / C " cmd / c ren @file * .HTML "
En Linux, puede usar el comando ' rename ' para renombrar archivos en lote.
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 , que es una aplicación de administrador de archivos, te permite enumerar y amp; seleccione todos los archivos dentro de su directorio & amp; subdirecciones, entonces puede ejecutar cualquiera de las operaciones de comandante total en ellos. uno de ellos es: cambiar el nombre de los archivos seleccionados.
AWK en Linux. Para el primer directorio, esta es su respuesta ... Extrapolar llamando recursivamente a awk en dir_path, tal vez escribiendo otro awk que escriba este awk exacto a continuación ... y así sucesivamente.
ls dir_path/. | awk -F"." '{print "mv file_name/"<*>" dir_path/"$1".new_extension"}' |csh
Para Windows, he creado una solución de VBScript litte conveniente con cambio de nombre basado en expresiones regulares y Arrastre y amplificación Apoyo de la gota. Pruébelo si lo desea: póngalo en un archivo vbs y coloque su carpeta en él en el Explorador.
En Windows, Rename hace una muy buen trabajo en eso Freeware, pero no de código abierto.
En Windows, puede encontrar la aplicación de código abierto C # renombrador de archivos masivos en https : //filerenamer.codeplex.com funciona con un simple archivo de excel . Proporcione un archivo de Excel con dos columnas de origen y destino a esta aplicación, y ya está.
En Unix, puede utilizar rnm :
rnm -rs '/\.html$/.htm/' -fo -dp -1 *
O
rnm -ns '/n/.htm' -ss '\.html
Explicación:
-
-ns
: cadena de nombre (nuevo nombre). / n /
es una regla de cadena de nombre que se expande al nombre de archivo sin la extensión.
-
-ss
: cadena de búsqueda (expresiones regulares). Busca archivos con coincidencia.
-
-rs
: reemplace la cadena del formulario /search_regex/replace_part/modifier
-
-fo
: modo de solo archivo
-
-dp
: profundidad del directorio (-1 significa ilimitado).
-fo -dp -1 *
Explicación:
-
-ns
: cadena de nombre (nuevo nombre)./ n /
es una regla de cadena de nombre que se expande al nombre de archivo sin la extensión. -
-ss
: cadena de búsqueda (expresiones regulares). Busca archivos con coincidencia. -
-rs
: reemplace la cadena del formulario/search_regex/replace_part/modifier
-
-fo
: modo de solo archivo -
-dp
: profundidad del directorio (-1 significa ilimitado).