Umbenennen von Dateien mit node.js.

87

Ich bin ziemlich neu in der Verwendung von JS, also werde ich versuchen, so spezifisch wie möglich zu sein :)

  • Ich habe einen Ordner mit 260 PNG - Dateien mit verschiedenen Ländernamen: Afghanistan.png, Albania.png, Algeria.pngetc.

  • Ich habe eine .json-Datei mit einem Code mit allen ISO-Codes für jedes Land wie folgt:

{  
  "AF": "Afghanistan",  
  "AL": "Albanien",  
  "DZ": "Algerien",  
  ...  
}}
  • Ich möchte die PNG-Dateien mit ihrem ISO-Namen in Kleinbuchstaben umbenennen. Das bedeutet würde Ich mag die folgende Eingabe mit allen in meinem Ordner haben .pngBilder: af.png, al.png, dz.pngetc.

Ich habe versucht, selbst zu recherchieren, wie man das mit node.js macht, aber ich bin hier ein wenig verloren und würde mich über einige Hinweise sehr freuen.

Danke im Voraus!

jlalovi
quelle

Antworten:

147

Sie müssen dafür Folgendes verwenden fs: http://nodejs.org/api/fs.html

Und insbesondere die fs.rename()Funktion:

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

Setzen Sie dies in eine Schleife über die Schlüssel und Werte Ihres frisch gelesenen JSON-Objekts, und Sie haben ein Batch-Umbenennungsskript.

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

(Dies setzt hier voraus, dass Ihre .jsonDatei vertrauenswürdig ist und dass es sicher ist, ihre Schlüssel und Werte direkt in Dateinamen zu verwenden. Wenn dies nicht der Fall ist, müssen Sie diese ordnungsgemäß umgehen!)

VoteyDisciple
quelle
9
Die letzten
Pranav
Sie können einfach .json importieren: const obj = require('/path/to/countries.json');und dann:for(var p in obj) {...}
ViES
1
Sie könnten, aber ... nicht. Mit require führt Code in dieser Datei aus. Sie bieten jemandem die Möglichkeit, potenziell schädlichen Code in die Anwendung einzufügen (dh indem Sie die JSON-Datei ändern). Lesen und Verwenden JSON.parse()vermeidet dies insgesamt. Gehen Sie keine Kompromisse bei der Sicherheit ein, um etwas weniger Code zu schreiben.
VoteyDisciple
Es ist sicherer, path.resolve zu verwenden, als Ihre Pfadzeichenfolge zu verketten.
JulianSoto
Für synchrone Versionfs.renameSync(oldPath, newPath);
Tim
9
  1. fs.readdir (Pfad, Rückruf)
  2. fs.rename (alt, neu, Rückruf)

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

Eine wichtige Sache - Sie können auch Synchronisierungsfunktionen verwenden. (Es wird wie C-Programm funktionieren)

Pranav
quelle
5

Verwenden Sie zum synchronen Umbenennen fs.renameSync

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

Für Linux / Unix-Betriebssysteme können Sie die Shell-Syntax verwenden

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

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

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

Das ist es!

Abdennour TOUMI
quelle
1
Gibt es einen Grund, warum dies vorzuziehen wäre fs.rename?
Electrovir