我正在尝试构建一个可视化文件结构的浏览器应用程序,因此我想将文件结构打印到JSON对象中。
我尝试使用很多'ls'管道传输给sed,但看起来效果最好。
现在我只想尝试使用命令
find ~ -maxdepth ? -name ? -type d -print
并标记路径变量
我尝试使用PHP-exec这个简单的ajax,但是数组行走非常慢。 我正在考虑直接从bash脚本执行此操作,但我无法弄清楚如何获取关联数组的pass-by-reference以递归方式将所有标记化路径变量添加到树中。
有没有更好或既定的方法来做到这一点?
谢谢!
答案 0 :(得分:1)
我不知道您的应用程序的要求是什么,但解决您的问题(以及许多其他问题)的一种解决方案是隐藏抽象层后面的实际文件系统布局。
基本上,你写两个线程。第一个擦除文件结构并创建其内容的数据库表示。第二个响应浏览器请求,查询第一个线程创建的数据库,并生成您的JSON(即正常的Web请求处理程序线程)。
通过抽象底层存储结构(文件系统),您可以创建一个可以添加并发性,处理IO错误等的图层。当有人更改结构中的文件时,直到“刮刀”才能看到Web客户端“线程检测到更改并更新数据库。但是,因为Web请求不依赖于读取底层文件结构而只是查询数据库,所以响应时间应该很快。
HTH, 内特。
答案 1 :(得分:0)
走在磁盘上总是比理想慢,只是因为需要完成的所有搜索工作。如果这不是你的问题,我的建议是努力消除开销......从最小化fork()调用的数量开始。然后,您可以根据自己认为合适的时间缓存结果。
由于您已经提到过PHP,我的建议是用PHP编写整个服务器端系统并使用DirectoryIterator或RecursiveDirectoryIterator类。这是一个SO answer,类似于您要求使用前者实现的内容。
如果磁盘I / O开销有问题,我的建议是实现一个mlocate行的系统,该系统将目录列表与目录ctimes一起缓存,并使用stat()来比较ctimes并且只返回-read内容已更改的目录。
我在PHP中没有做太多的文件系统工作,但是,如果它有帮助,我可以为你提供基本的mlocate风格的updatedb进程的Python实现。 (我用它来索引必须从DVD + R手动恢复的文件,如果我的驱动器出现故障,因为它们太大而不适合我的rdiff-backup目标驱动器)
答案 2 :(得分:0)
9年后... 使用tree应该可以完成这项工作。
tree ~ -J -L ? -P '?' -d --noreport
其中: