如何parsing在JavaScript命令的响应文件的JavaScript列表

我使用ssh2库来执行命令到远程服务器/ shell,我需要在特定目录中的所有文件的列表。 如何在JavaScript文件列表parsing? 我在命令ls上有类似string的响应,但是由''分隔,但是我不能parsing,因为名字也可以包含''。 我可以做ls -al但是我不知道它是否返回所有相同格式的shell来parsing。如何在javascript中获取远程文件的列表,哪个命令用于shell。

您可以使用ls -1强制输出为每行一个条目(文件名因此被\n分隔)。

 -1 (The numeric digit 'one'.) Force output to be one entry per line. This is the default when output is not to a terminal. 

这在大多数情况下都可以使用,但是并不是。 有关更多信息,请参阅http://mywiki.wooledge.org/ParsingLs ,以了解为什么不应该分析ls的输出。

关键是Unix文件名可以包含除\0之外的所有内容,并且没有ls实现,允许你用\0而不是\n来分隔文件名。

但是, ssh2支持SFTP,因此有一个更好的方法来列出目录中的文件:

 var Connection = require('ssh2'); var c = new Connection(); c.on('ready', function() { c.sftp(function(err, sftp) { if (err) throw err; sftp.opendir('foo', function readdir(err, handle) { if (err) throw err; // Reads some directory entries, but NOT neccessarily all sftp.readdir(handle, function(err, list) { if (err) throw err; // All files have been listed if (list === false) { sftp.close(handle, function(err) { if (err) throw err; sftp.end(); }); return; } console.dir(list); }); }); }); }); 

有关readdir方法的文档,请参阅ssh2 GitHub页面: https : //github.com/mscdex/ssh2

你可以用find来代替ls

 find [path to directory you are interested in] -maxdepth 1 -print0 

-maxdepth 1防止它recursion,所以它的工作原理更像ls默认的。 -print0告诉find使用'\ 0'来分隔它打印的文件名。 这可以被细分。