node.jsを使用してファイルの名前を変更する


90

私はJSの使用にまったく慣れていないので、できるだけ具体的にしようと思います:)

  • 私は別の国の名を持つ260の.pngファイルとフォルダを持っている:Afghanistan.pngAlbania.pngAlgeria.png、など

  • 次のような各国のすべてのISOコードを含むコードを含む.jsonファイルがあります。

{{  
  「AF」:「アフガニスタン」、  
  「AL」:「アルバニア」、  
  「DZ」:「アルジェリア」、  
  ..。  
}
  • .pngファイルの名前を小文字のISO名に変更したいと思います。私はすべてと私のフォルダに以下の入力がしたいことを意味し.png:画像を af.pngal.pngdz.png、など

node.jsでこれを行う方法を自分で調べようとしていましたが、ここで少し迷っています。いくつかの手がかりをたくさんいただければ幸いです。

前もって感謝します!

回答:


153

fsそのために使用する必要があります:http//nodejs.org/api/fs.html

そして特にfs.rename()機能:

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

これを、新しく読み取ったJSONオブジェクトのキーと値のループに入れると、バッチの名前変更スクリプトが得られます。

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

(これは、.jsonファイルが信頼できるものであり、そのキーと値をファイル名で直接使用しても安全であることを前提としています。そうでない場合は、それらを適切にエスケープしてください!)


9
あなたの答えの最後の2行は非常に重要です:)
Pranav 2014年

.json:const obj = require('/path/to/countries.json');をインポート してから:for(var p in obj) {...}
ViES 2018

1
できますが...できません。を使用require すると、そのファイル内のコード実行されます。誰かが悪意のあるコードをアプリケーションに挿入する可能性のある方法を導入しています(つまり、.jsonファイルを変更することによって)。読んで使用するJSON.parse()ことで、それを完全に回避できます。わずかに少ないコードを書くためにセキュリティを危険にさらさないでください。
VoteyDisciple 2018

パス文字列を連結する代わりに、path.resolveを使用するが安全です。
JulianSoto 2018

同期バージョンの場合fs.renameSync(oldPath, newPath);
Tim

9
  1. fs.readdir(パス、コールバック)
  2. fs.rename(old、new、callback)

通過する http://nodejs.org/api/fs.html

重要なことの1つは、同期機能も使用できることです。(Cプログラムのように動作します)



2

linux / unix OSの場合、シェル構文を使用できます

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

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

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

それでおしまい!


1
これが優先される理由はありfs.renameますか?
electrovir

それは同期だ-しかし、使用することができnodejs.org/api/fs.html#fs_fs_renamesync_oldpath_newpath
オーレ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.