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!

jlalovi
sumber

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!)

VoteyDisciple
sumber
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)

Pranav
sumber
7

Untuk penggantian nama sinkron, gunakan fs.renameSync

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

Untuk OS linux / unix, Anda dapat menggunakan sintaks shell

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

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

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

Itu dia!

Abdennour TOUMI
sumber
1
Adakah alasan mengapa ini lebih disukai fs.rename?
electrovir
Ini sinkron - Tapi bisa menggunakan nodejs.org/api/fs.html#fs_fs_renamesync_oldpath_newpath
Ole