多年来,在尝试了多种 SQL 和 NoSQL 数据库之后,我觉得确保以数据为中心的个人应用程序可移植性的最佳方法是完全避免使用所有真正的数据库。我认为文件系统是一种漂亮的数据库范例,它可移植、易于阅读,因此具有足够的寿命,足以满足我编写的个人应用程序类型。它就像一个强制树形结构的图形数据库(适合分区),使用符号链接来表示多对一关系。
有没有办法将整个文件系统拓扑导出为单个文件?命令的输出find
很有希望,但没有标准化的方法来导出指示符号链接指向的数据。我不想提出我个人选择的find
输出格式,例如:
/home/me/photos/beach/me_and_my_dog.jpg -> /home/me/photos/beach/1.jpg
如果之前有人做过建立文件系统拓扑导出格式的工作。
另一个候选文件是 JSON 文件:
home : [{
me : [{
photos : [{
beach : [{
1.jpg,
{ me_and_my_dog.jpg : ./1.jpg }
}]
}]
}
}]
但同样,表示文件类型的方式有多种,我想知道是否有人已经完成了建立标准的工作。
请注意,我不想导出文件的内容——这会使导出的内容比需要的要大得多。
答案1
的输出tree
命令似乎显示了您正在寻找的内容:
.
└── photos
└── beach
├── 1.jpg -> me_and_dog.jpg
└── me_and_dog.jpg
较新版本该命令甚至会输出为 HTML、XML 或 JSON。
XML 输出:
<?xml version="1.0" encoding="UTF-8"?>
<tree>
<directory name=".">
<directory name="photos">
<directory name="beach">
<link name="1.jpg" target="me_and_dog.jpg"></link>
<file name="me_and_dog.jpg"></file>
</directory>
</directory>
</directory>
<report>
<directories>2</directories>
<files>2</files>
</report>
</tree>
答案2
你可以使用mtree
它来实现这一点。请参阅www.freebsd.org/cgi/man.cgi?query=mtree&sektion=8&manpath=FreeBSD+6.3-RELEASE和code.google.com/p/mtree-port
mtree -c
它用途非常广泛。