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.