Zmiana nazw plików za pomocą node.js


90

Jestem całkiem nowy w używaniu JS, więc postaram się być tak konkretny, jak tylko potrafię :)

  • Mam folder z 260 .png plików z różnymi nazwami krajów: Afghanistan.png, Albania.png, Algeria.png, itd.

  • Mam plik .json z fragmentem kodu ze wszystkimi kodami ISO dla każdego kraju w następujący sposób:

{  
  „AF”: „Afganistan”,  
  „AL”: „Albania”,  
  „DZ”: „Algieria”,  
  ...  
}
  • Chciałbym zmienić nazwy plików .png na ich nazwy ISO pisane małymi literami. Oznacza to, że chciałbym mieć następujący wkład w moim folderze z wszystkich .pngobrazów: af.png, al.png, dz.png, itd.

Próbowałem samodzielnie dowiedzieć się, jak to zrobić z node.js, ale jestem trochę zagubiony i bardzo bym docenił kilka wskazówek.

Z góry dziękuję!

Odpowiedzi:


153

Będziesz musiał użyć fsdo tego: http://nodejs.org/api/fs.html

A w szczególności fs.rename()funkcja:

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

Umieść to w pętli nad kluczami i wartościami świeżo odczytanego obiektu JSON, a otrzymasz skrypt zmiany nazwy partii.

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

(Zakłada się tutaj, że Twój .jsonplik jest godny zaufania i że można bezpiecznie używać jego kluczy i wartości bezpośrednio w nazwach plików. Jeśli tak nie jest, pamiętaj, aby odpowiednio zmienić znaczenie!)


9
ostatnie 2 linijki twojej odpowiedzi są bardzo ważne :)
Pranav

możesz po prostu zaimportować .json: const obj = require('/path/to/countries.json');a następnie:for(var p in obj) {...}
ViES

1
Mógłbyś, ale ... nie. Użycie require wykonuje kod w tym pliku. Wprowadzasz sposób, aby ktoś mógł potencjalnie wstrzyknąć złośliwy kod do aplikacji (tj. Zmodyfikować plik .json). Czytanie i używanie JSON.parse()całkowicie tego eliminuje. Nie narażaj bezpieczeństwa, by pisać niewiele mniej kodu.
VoteyDisciple,

Bezpieczniej jest użyć path.resolve zamiast konkatenacji łańcucha ścieżki.
JulianSoto,

Wersja synchronicznafs.renameSync(oldPath, newPath);
Tim

9
  1. fs.readdir (ścieżka, wywołanie zwrotne)
  2. fs.rename (stary, nowy, oddzwonienie)

Iść przez http://nodejs.org/api/fs.html

Jedna ważna rzecz - możesz również korzystać z funkcji synchronizacji. (Będzie działać jak program w C)



Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.