Mengganti nama file menggunakan node.js


90

Saya cukup baru dalam menggunakan JS, jadi saya akan mencoba sespesifik mungkin :)

  • Saya memiliki folder dengan file 260 png dengan nama negara yang berbeda: Afghanistan.png, Albania.png, Algeria.png, dll

  • Saya memiliki file .json dengan potongan kode dengan semua kode ISO untuk setiap negara seperti ini:

{  
  "AF": "Afghanistan",  
  "AL": "Albania",  
  "DZ": "Aljazair",  
  ...  
}
  • Saya ingin mengganti nama file .png dengan nama ISO mereka dalam huruf kecil. Itu berarti saya ingin memiliki input berikut dalam folder saya dengan semua .pnggambar: af.png, al.png, dz.png, dll

Saya mencoba untuk meneliti sendiri bagaimana melakukan ini dengan node.js, tetapi saya sedikit tersesat di sini dan saya sangat menghargai beberapa petunjuk.

Terima kasih sebelumnya!

Jawaban:


154

Anda harus menggunakan fsuntuk itu: http://nodejs.org/api/fs.html

Dan khususnya fs.rename()fungsinya:

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

Letakkan itu dalam satu lingkaran di atas kunci dan nilai objek JSON yang baru Anda baca, dan Anda mendapatkan skrip penggantian nama 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);
        });
    }
});

(Ini mengasumsikan di sini bahwa .jsonfile Anda dapat dipercaya dan aman untuk menggunakan kunci dan nilainya secara langsung dalam nama file. Jika bukan itu masalahnya, pastikan untuk menghindarinya dengan benar!)


9
2 baris terakhir dari jawaban Anda sangat penting :)
Pranav

Anda bisa mengimpor .json: const obj = require('/path/to/countries.json');dan kemudian:for(var p in obj) {...}
ViES

1
Bisa, tapi ... jangan. Menggunakan require kode eksekusi di file itu. Anda memperkenalkan cara bagi seseorang yang berpotensi menyuntikkan kode berbahaya ke dalam aplikasi (yaitu, dengan memodifikasi file .json). Membaca dan menggunakan JSON.parse()sama sekali menghindari hal itu. Jangan kompromi keamanan demi menulis kode yang sangat sedikit.
VoteyDisciple

Lebih aman menggunakan path.resolve daripada menggabungkan string jalur Anda.
JulianSoto

Untuk versi sinkronfs.renameSync(oldPath, newPath);
Tim

9
  1. fs.readdir (jalur, panggilan balik)
  2. fs.rename (lama, baru, panggilan balik)

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

Satu hal penting - Anda juga dapat menggunakan fungsi sinkronisasi. (Ini akan bekerja seperti program C)


7

Untuk penggantian nama sinkron, gunakan fs.renameSync

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.