Renommer les fichiers à l'aide de node.js


90

Je suis assez nouveau dans l'utilisation de JS, je vais donc essayer d'être aussi précis que possible :)

  • J'ai un dossier avec les fichiers de 260 avec différents noms de pays: Afghanistan.png, Albania.png, Algeria.png, etc.

  • J'ai un fichier .json avec un morceau de code avec tous les codes ISO pour chaque pays comme ceci:

{  
  "AF": "Afghanistan",  
  "AL": "Albanie",  
  "DZ": "Algérie",  
  ...  
}
  • Je voudrais renommer les fichiers .png avec leur nom ISO en minuscules. Cela signifie que je voudrais avoir l'entrée suivante dans mon dossier avec toutes les .pngimages: af.png, al.png, dz.png, etc.

J'essayais de rechercher par moi-même comment faire cela avec node.js, mais je suis un peu perdu ici et j'apprécierais beaucoup quelques indices.

Merci d'avance!

Réponses:


154

Vous devrez utiliser fspour cela: http://nodejs.org/api/fs.html

Et en particulier la fs.rename()fonction:

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

Mettez cela en boucle sur les clés et les valeurs de votre objet JSON fraîchement lu, et vous avez un script de changement de nom par lots.

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);
        });
    }
});

(Cela suppose ici que votre .jsonfichier est digne de confiance et qu'il est sûr d'utiliser ses clés et ses valeurs directement dans les noms de fichiers. Si ce n'est pas le cas, veillez à les échapper correctement!)


9
Les 2 dernières lignes de votre réponse sont très importantes :)
Pranav

vous pouvez simplement importer .json: const obj = require('/path/to/countries.json');et ensuite:for(var p in obj) {...}
ViES

1
Vous pourriez, mais ... ne le faites pas. L'utilisation du require code exécute dans ce fichier. Vous introduisez un moyen pour quelqu'un d'injecter potentiellement du code malveillant dans l'application (c'est-à-dire en modifiant le fichier .json). La lecture et l'utilisation JSON.parse()évitent complètement cela. Ne compromettez pas la sécurité pour écrire un peu moins de code.
VoteyDisciple

Il est plus sûr d'utiliser path.resolve au lieu de concaténer votre chaîne de chemin.
JulianSoto

Pour la version synchronefs.renameSync(oldPath, newPath);
Tim

9
  1. fs.readdir (chemin, rappel)
  2. fs.rename (ancien, nouveau, rappel)

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

Une chose importante - vous pouvez également utiliser les fonctions de synchronisation. (Cela fonctionnera comme le programme C)


7

Pour renommer synchrone, utilisez fs.renameSync

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.