Cambiar el nombre de los archivos usando node.js


90

Soy bastante nuevo en el uso de JS, así que intentaré ser lo más específico que pueda :)

  • Tengo una carpeta con 260 archivos .png con diferentes nombres de países: Afghanistan.png, Albania.png, Algeria.png, etc.

  • Tengo un archivo .json con un fragmento de código con todos los códigos ISO para cada país como este:

{  
  "AF": "Afganistán",  
  "AL": "Albania",  
  "DZ": "Argelia",  
  ...  
}
  • Me gustaría cambiar el nombre de los archivos .png con su nombre ISO en minúsculas. Eso significa que me gustaría tener la siguiente entrada en mi carpeta con todas las .pngimágenes: af.png, al.png, dz.png, etc.

Estaba tratando de investigar por mí mismo cómo hacer esto con node.js, pero estoy un poco perdido aquí y agradecería mucho algunas pistas.

¡Gracias por adelantado!

Respuestas:


154

Deberá usar fspara eso: http://nodejs.org/api/fs.html

Y en particular la fs.rename()función:

var fs = require('fs');
fs.rename('/path/to/Afghanistan.png', '/path/to/AF.png', function(err) {
    if ( err ) console.log('ERROR: ' + err);
});

Ponlo en un bucle sobre las claves y valores de tu objeto JSON recién leído, y tendrás un script de cambio de nombre por lotes.

fs.readFile('/path/to/countries.json', function(error, data) {
    if (error) {
        console.log(error);
        return;
    }

    var obj = JSON.parse(data);
    for(var p in obj) {
        fs.rename('/path/to/' + obj[p] + '.png', '/path/to/' + p + '.png', function(err) {
            if ( err ) console.log('ERROR: ' + err);
        });
    }
});

(Aquí se asume que su .jsonarchivo es confiable y que es seguro usar sus claves y valores directamente en los nombres de archivo. Si ese no es el caso, ¡asegúrese de escapar de ellos correctamente!)


9
Las últimas 2 líneas de su respuesta son muy importantes :)
Pranav

simplemente puede importar .json: const obj = require('/path/to/countries.json');y luego:for(var p in obj) {...}
ViES

1
Podrías, pero ... no lo hagas. El uso require ejecuta código en ese archivo. Estás introduciendo una forma para que alguien potencialmente inyecte código malicioso en la aplicación (es decir, modificando el archivo .json). Leer y usar JSON.parse()evita eso por completo. No comprometa la seguridad por escribir un poco menos de código.
VoteyDisciple

Es más seguro usar path.resolve en lugar de concatenar su cadena de ruta.
JulianSoto

Para versión sincrónicafs.renameSync(oldPath, newPath);
Tim

9
  1. fs.readdir (ruta, devolución de llamada)
  2. fs.rename (antiguo, nuevo, devolución de llamada)

Atravesar http://nodejs.org/api/fs.html

Una cosa importante: también puede utilizar las funciones de sincronización. (Funcionará como el programa C)


7

Para el cambio de nombre sincrónico, use fs.renameSync

fs.renameSync('/path/to/Afghanistan.png', '/path/to/AF.png');

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.