Descubra cómo cambiar el nombre de un conjunto de archivos utilizando Node.js
En esta entrada de blog voy a explicar cómo cambiar el nombre de un conjunto de archivos.
El mismo proceso funciona para mover archivos a otra carpeta, porque cuando cambias el nombre cambias la ruta del archivo.
La motivación para esta tarea fue la siguiente: en Hugo podemos escribir publicaciones de blog como archivos, como este:
first-post.mdsecond-post.mdthird-post.md
También podemos agregarlos a una carpeta que contenga un index.md
archivo:
first-post/ index.mdsecond-post/ index.mdthird-post/ index.md
La diferencia es que con la carpeta podemos añadir imágenes y asociarlas más fácilmente a una entrada del blog.
Podría haber hecho el cambio manualmente, pero tenía alrededor de 50 archivos en la carpeta y realmente no quería hacer ese trabajo.
Quería que sucediera automáticamente.
Comencemos solicitando un módulo principal que vamos a utilizar: fs
. Como es un módulo principal, no es necesario npm install
.
const fs = require('fs')
Luego, obtenemos una referencia a la carpeta actual. Supongo que vamos a ejecutar el script en la misma carpeta donde queremos realizar este cambio.
__dirname
es la variable que siempre apunta a la carpeta de trabajo actual.
Obtengo una lista de todos los archivos y carpetas:
const files = fs.readdirSync(__dirname)
Luego filtro solo los elementos que terminan con .md
:
for (const file of files) { if (file.endsWith('.md')) { console.log(file) }}
Una vez que tenemos la file
referencia, que representa el nombre del archivo, podemos llamar fs.mkdirSync()
para crear la carpeta:
fs.mkdirSync( __dirname + '/' + file.replace('.md', ''), { recursive: true }, (err) = { console.log(err) })
Una vez que creamos la carpeta, llamamos fs.renameSync()
.
La razón por la que utilizo las versiones de bloqueo mkdirSync()
y renameSync()
en lugar de mkdir()
y rename()
es que quiero esperar hasta que se cree la carpeta antes de mover el archivo a la carpeta. De lo contrario, podríamos obtener errores si la segunda función se ejecuta antes que la segunda (yo usaría await
pero la API de Node.js no usa promesas, tendríamos que usar promisify pero es más simple usar la versión de bloqueo de esas API). Fotos Porno y actrices porno
La fs.renameSync()
función acepta 3 parámetros:
- La ruta actual
- El camino que queremos seguir
- Se activa una devolución de llamada si hay un error.
La ruta actual es:
__dirname + '/' + file
El camino que queremos recorrer es:
__dirname + '/' + file.replace('.md', '') + '/index.md'
¿Ves? Creamos una nueva carpeta a partir del nombre del archivo y luego agregamos index.md
:
fs.renameSync( __dirname + '/' + file, __dirname + '/' + file.replace('.md', '') + '/index.md', err = { console.log(err) })
Aquí está el código completo:
const fs = require('fs')const files = fs.readdirSync(__dirname)for (const file of files) { if (file.endsWith('.md')) { fs.mkdirSync( __dirname + '/' + file.replace('.md', ''), { recursive: true }, (err) = { console.log(err) } ) fs.renameSync( __dirname + '/' + file, __dirname + '/' + file.replace('.md', '') + '/index.md', (err) = { console.log(err) } ) }}
Tips de Node.js
Tal vez te puede interesar:
- Cómo gestionar la carga de archivos en Node.js
- Cómo usar promesas y esperar con funciones basadas en devolución de llamadas de Node.js
- Cómo obtener los nombres de todos los archivos en una carpeta en Node
- Cómo comprobar la versión actual de Node.js en tiempo de ejecución
Cómo renombrar archivos de forma masiva en Node.js
En esta entrada de blog voy a explicar cómo cambiar el nombre de un conjunto de archivos. Descubra cómo cambiar el nombre de un conjunto de archivos utilizan
programar
es
https://aprendeprogramando.es/static/images/programar-como-renombrar-archivos-de-forma-masiva-en-node-2339-0.jpg
2024-10-18
Si crees que alguno de los contenidos (texto, imagenes o multimedia) en esta página infringe tus derechos relativos a propiedad intelectual, marcas registradas o cualquier otro de tus derechos, por favor ponte en contacto con nosotros en el mail [email protected] y retiraremos este contenido inmediatamente