Node.js kullanarak dosyaları yeniden adlandırma


91

JS'yi kullanma konusunda oldukça yeniyim, bu yüzden elimden geldiğince spesifik olmaya çalışacağım :)

  • Ben farklı bir ülke adları ile 260 .png dosyaları ile bir klasör vardır: Afghanistan.png, Albania.png, Algeria.pngvb

  • Her ülke için aşağıdaki gibi tüm ISO kodlarını içeren bir kod parçası içeren bir .json dosyam var:

{  
  "AF": "Afganistan",  
  "AL": "Arnavutluk",  
  "DZ": "Cezayir",  
  ...  
}
  • Küçük harflerle .png dosyalarını ISO adlarıyla yeniden adlandırmak istiyorum. Araçlarla Bu bütün ile benim klasöründe aşağıdaki giriş istiyorum .pnggörüntüler: af.png, al.png, dz.pngvb

Bunu node.js ile nasıl yapacağımı kendi kendime araştırmaya çalışıyordum, ancak burada biraz kayboldum ve bazı ipuçlarını çok takdir ediyorum.

Şimdiden teşekkürler!

Yanıtlar:


157

Bunun için kullanmanız gerekecek fs: http://nodejs.org/api/fs.html

Ve özellikle fs.rename()işlev:

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

Bunu, yeni okunan JSON nesnenizin anahtarları ve değerleri üzerinden bir döngü haline getirin ve bir toplu yeniden adlandırma komut dosyası elde edin.

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

(Burada .jsondosyanızın güvenilir olduğunu ve anahtarlarını ve değerlerini doğrudan dosya adlarında kullanmanın güvenli olduğunu varsayar . Durum böyle değilse, onlardan doğru şekilde kaçtığınızdan emin olun!)


9
cevabınızın son 2 satırı çok önemli :)
— Pranav

const obj = require('/path/to/countries.json');for(var p in obj) {...}
— .json'u

1
Yapabilirsin, ama ... yapma. Kullanmak o dosyadaki require kodu çalıştırır . Birinin uygulamaya kötü amaçlı kod eklemesi için bir yol sunuyorsunuz (yani .json dosyasını değiştirerek). Okumak ve kullanmak JSON.parse()bundan tamamen kaçınıyor. Çok az kod yazmak adına güvenlikten ödün vermeyin.
— VoteyDisciple

Yol dizenizi birleştirmek yerine path.resolve kullanmak daha güvenlidir .
— JulianSoto

Senkron versiyon içinfs.renameSync(oldPath, newPath);
— Tim

9
  1. fs.readdir (yol, geri arama)
  2. fs.rename (eski, yeni, geri arama)

Geç http://nodejs.org/api/fs.html

Önemli bir şey - senkronizasyon işlevlerini de kullanabilirsiniz. (C programı gibi çalışacaktır)



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.