file-io - ubicacion - ruta de acceso de un archivo c#
Cambiar el nombre de los archivos en los subdirectorios (15)
¿Hay alguna manera de cambiar el nombre de los archivos por lotes en los subdirectorios?
Ejemplo:
Cambie el nombre de * .html a * .htm en una carpeta que tenga directorios y subdirectorios.
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
En Bash, podrías hacer lo siguiente:
for x in $(find . -name /*.html); do
mv $x $(echo "$x" | sed ''s//.html$/.htm/'')
done
En Linux, puede usar el comando '' rename '' para cambiar el nombre de los archivos por lotes.
En Unix, puedes usar rnm :
rnm -rs ''//.html$/.htm/'' -fo -dp -1 *
O
rnm -ns ''/n/.htm'' -ss ''/.html$'' -fo -dp -1 *
Explicación:
-
-ns
: nombre de la cadena (nombre nuevo)./n/
es una regla de cadena de nombre que se expande al nombre de archivo sin la extensión. -
-ss
: cadena de búsqueda (regex). Busca archivos con coincidencias. -
-rs
: reemplazar la cadena de la forma/search_regex/replace_part/modifier
-
-fo
: modo solo archivo -
-dp
: profundidad del directorio (-1 significa ilimitado).
En Windows, The Rename hace un trabajo bastante bueno en eso. Freeware, pero no de código abierto.
En Windows, puede descubrir la aplicación simple de renovación de archivos de código abierto C # en https://filerenamer.codeplex.com funciona con un archivo de Excel simple. Brinde un archivo de Excel con dos columnas fuente y destino a esta aplicación y listo.
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)
Estoy seguro de que hay una manera más elegante, pero aquí está 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
Para Windows, esta es la mejor herramienta que he encontrado:
Puede hacer cualquier cosa Y tiene el fregadero de la cocina con él.
Para Linux, tiene una plétora de lenguajes de scripting y shells para ayudarlo, al igual que las respuestas anteriores.
Para Windows, he creado una solución VBScript pequeña y práctica con renombrado basado en expresiones regulares y soporte de arrastrar y soltar. Pruébelo si lo desea; colóquelo en un archivo vbs y colóquelo en el Explorador.
Símbolo del sistema de Windows: (Si está dentro de un archivo por lotes, cambie% x por %% 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
Si tiene forfiles (viene con Windows XP y 2003 y cosas más nuevas, creo), puede ejecutar:
forfiles / S / M * .HTM / C "cmd / c ren @file * .HTML"
Total Commander, que es una aplicación de administrador de archivos, le permite listar y seleccionar todos los archivos dentro de su directorio y subdirectorios, luego puede ejecutar cualquiera de las operaciones totales del comandante en ellos. uno de ellos es: cambiar el nombre de los archivos seleccionados.
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!
find . -regex ".*html$" | while read line;
do
A=`basename ${line} | sed ''s/html$/htm/g''`;
B=`dirname ${line}`;
mv ${line} "${B}/${A}";
done