我想以我喜欢的方式重新创建ls -AlF
程序,并且我想使用 NoFlo 来完成它。
这是我制作的图表 ( graphs/ListDirectory.fbp
):
ReadDir(filesystem/ReadDir)
Stat(filesystem/Stat)
SplitByStatType(SplitByStatType)
Display(core/Output)
ReadDir OUT -> IN Stat
ReadDir ERROR -> IN Display
Stat OUT -> IN SplitByStatType
Stat ERROR -> IN Display
SplitByStatType DIRECTORY -> IN Display
SplitByStatType FILE -> IN Display
'.' -> SOURCE ReadDir
这是组件components/SplitByStatType.js
:
const noflo = require('noflo')
exports.getComponent = () => {
const component = new noflo.Component()
component.description = 'Splits directories and files.'
component.icon = 'directory'
component.inPorts.add('in', {
datatype: 'object',
})
component.outPorts.add('file', {
datatype: 'object',
})
component.outPorts.add('directory', {
datatype: 'object',
})
component.outPorts.add('blockdevice', {
datatype: 'object',
})
component.outPorts.add('characterdevice', {
datatype: 'object',
})
component.outPorts.add('fifo', {
datatype: 'object',
})
component.outPorts.add('socket', {
datatype: 'object',
})
component.outPorts.add('error', {
datatype: 'object',
})
component.process((input, output) => {
if (!input.hasData('in')) return
const data = input.getData('in')
const { isFile, isDirectory, isBlockDevice, isCharacterDevice, isFifo, isSocket } = data
if (isFile) {
output.send({
file: data,
})
}
if (isDirectory) {
output.send({
directory: data,
})
}
if (isBlockDevice) {
output.send({
blockdevice: data,
})
}
if (isCharacterDevice) {
output.send({
characterdevice: data,
})
}
if (isFifo) {
output.send({
fifo: data,
})
}
if (isSocket) {
output.send({
socket: data,
})
}
// TODO: Else, error?
output.done()
})
return component
}
- 你会怎么称呼这个组件和/或有人已经做了它?
- 我可以在不使用其他已经存在的组件实现我自己的组件的情况下做到这一点吗?
- 如何将文件名和统计信息联系在一起,以便我可以在另一个组件中处理它并为每个组件打印一行?
我想要结束的是每个节点一行,首先是目录(排序并使用/),最后是文件(也排序,文件首先以'.'开头)。