Ridenominazione dei file utilizzando node.js


91

Sono abbastanza nuovo nell'uso di JS, quindi cercherò di essere il più specifico possibile :)

  • Ho una cartella con 260 .png file con nomi di paesi diversi: Afghanistan.png, Albania.png, Algeria.png, etc.

  • Ho un file .json con un pezzo di codice con tutti i codici ISO per ogni paese come questo:

{  
  "AF": "Afghanistan",  
  "AL": "Albania",  
  "DZ": "Algeria",  
  ...  
}
  • Vorrei rinominare i file .png con il loro nome ISO in minuscolo. Ciò significa che mi piacerebbe avere la seguente entrata nella mia cartella con tutte le .pngimmagini: af.png, al.png, dz.png, etc.

Stavo cercando di cercare da solo come farlo con node.js, ma sono un po 'perso qui e apprezzerei molto alcuni indizi.

Grazie in anticipo!

Risposte:


157

Dovrai usare fsper quello: http://nodejs.org/api/fs.html

E in particolare la fs.rename()funzione:

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

Mettilo in un ciclo sulle chiavi e sui valori del tuo oggetto JSON appena letto e avrai uno script di ridenominazione batch.

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

(Questo presuppone che il tuo .jsonfile sia affidabile e che sia sicuro usare le sue chiavi e valori direttamente nei nomi dei file. Se non è così, assicurati di evitarli correttamente!)


9
le ultime 2 righe della tua risposta sono molto importanti :)
Pranav

puoi semplicemente importare .json: const obj = require('/path/to/countries.json');e poi:for(var p in obj) {...}
ViES

1
Potresti, ma ... non farlo. L'uso require esegue il codice in quel file. Stai introducendo un modo per consentire a qualcuno di iniettare potenzialmente codice dannoso nell'applicazione (ad esempio, modificando il file .json). Leggere e usare lo JSON.parse()evita del tutto. Non compromettere la sicurezza per il gusto di scrivere un po 'meno codice.
VoteyDisciple

È più sicuro utilizzare path.resolve invece di concatenare la stringa del percorso.
JulianSoto

Per la versione sincronafs.renameSync(oldPath, newPath);
Tim

9
  1. fs.readdir (percorso, richiamata)
  2. fs.rename (vecchio, nuovo, richiamata)

Vai oltre http://nodejs.org/api/fs.html

Una cosa importante: puoi usare anche le funzioni di sincronizzazione. (Funzionerà come il programma C)


8

Per la ridenominazione sincrona utilizzare fs.renameSync

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

3

Per il sistema operativo linux / unix, è possibile utilizzare la sintassi della shell

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

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

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

Questo è tutto!


1
C'è un motivo per cui questo sarebbe preferito fs.rename?
electrovir

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.