JavaScript
Node.js
sftp

[Node.js]sftpでも「ls -R」したい

はじめに

sftp接続しか出来ない環境でファイルリストをとってくるっていうのをPythonでやってるのを見てnode.jsでも出来るかなと思ってやってみました。
sftpだとlsコマンドが再帰的に実行できないっぽくてコマンド一発とはいかないのが少し困りますね。

準備

sftp接続に使うモジュールをインストール

npm install --save ssh2-sftp-client

実装

const SftpClient = require('ssh2-sftp-client');
const fs = require('fs');

const sftp = new SftpClient();

(async () => {

  let result = {};

  await sftp.connect({
    host: "", //接続IP
    port: "", //接続ポート
    username: "", //ID
    password: "", //パスワード
  })

  await lsR("/"); //探索開始ディレクトリを指定

  await fs.writeFileSync('result.json', JSON.stringify(result,null,2)); //結果をjsonファイルに出力する

  sftp.end();

  async function lsR(path){
    let list = await sftp.list(path);

    console.log(path);

    result[path] = list;

    for(let i=0; i<list.length; i++){
      let item = list[i];
      if(item.type === "d"){
        await lsR(path + item.name + "/")
      }
    }

  }
})();