web-dev-qa-db-fra.com

Renommer des fichiers en utilisant node.js

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 260 fichiers .png 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 minuscule. Cela signifie que j'aimerais avoir l'entrée suivante dans mon dossier avec tous les .png images: af.png, al.png, dz.png, etc.

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

Merci d'avance!

71
jlalovi

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

Et en particulier la fonction fs.rename():

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 obtenez un script de changement de nom par lot.

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

(Ceci suppose ici que votre .json fichier est digne de confiance et qu'il est sécuritaire d'utiliser ses clés et ses valeurs directement dans les noms de fichiers. Si ce n'est pas le cas, assurez-vous de les échapper correctement!)

118
VoteyDisciple
  1. fs.readdir (chemin d'accès, 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 programme C)

8
Pranav

Pour les OS Linux/Unix, vous pouvez utiliser la syntaxe Shell

const Shell = require('child_process').execSync ; 

const currentPath= `/path/to/name.png`;
const newPath= `/path/to/another_name.png`;

Shell(`mv ${currentPath} ${newPath}`);

C'est ça!

0
Abdennour TOUMI

Pour renommer de manière synchrone, utilisez fs.renameSync

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