在工作中,我负责维护标准文件系统上大量不同数据的组织。其中一部分是提出合理的分类(按相似性、需求、读/写访问权限等),但更重要的部分是实际记录它:哪些文档/文件/媒体应该放在哪里,什么不应该放在这个目录中,“对于略有不同的内容,请参阅 ../../other-dir”,等等。
目前,我已经readme
在每个要记录的目录中使用纯文本文件记录了这一点。如果有人不确定某个目录中应该包含什么,他们就会阅读该文件。
这确实有效,但对于任何维护非平凡目录结构的人员都必须遇到的问题,我却有这种原始的自定义解决方案,这似乎有点奇怪。例如,我所知道的每家公司都有某种共享文件系统,其中约定的分类术语很重要。根据我的经验,人们只需通过反复试验和实验来了解什么是什么。
因此,请允许我提出一个更好的解决方案,希望您能告诉我它是否存在。任何文件系统上的任何目录都可以有一个名为的隐藏纯文本文件.readme
。其内容是描述性的人类语言。它使用一些类似 Markdown 的标记,仅包含粗体、斜体和指向其他目录的(相对)超链接。现在,适当启用的文件浏览器将.readme
在显示目录时检查名为的文件。如果存在,则解析其内容并显示在目录路径小部件附近不显眼的窗格中。其中的任何链接都可以单击,用户将被带到该链接的目标目录。
我认为实施此类标准的努力将带来数倍的可用性收益。例如,我们将拥有 Nautilus、Konqueror 等插件。它可用于显示 Web 服务器提供的标准文件列表中的目录信息。等等。
那么,问题是:这样的事情存在吗?如果没有,为什么不存在?人们认为这是一个值得的想法吗?
答案1
据我所知,没有标准。以下是我根据经验得出的一些想法。
设置好后就不要更改
这是大多数公司失败的原因。没有什么比不断变化的文件系统结构更糟糕的了。如果无法保持其恒定,那么纯文件系统就不适合用来组织您的信息。请使用数据库或内容管理系统。
使用描述性且一致的目录名称
没人有时间阅读.filing
文件或其他内容。如果您的目录名称不能自我解释,您可能就会迷失方向。
为你的目录结构编写文档
写一份文件来解释每个目录的作用。给出大量的例子。让任何需要使用你的结构的人都能看到它,但不要相信任何人都会读它。它应该更像是一个圣经给你。要找到这样的文档的例子并不容易,因为显然公司不会发布它们。开源软件的一个例子是文件系统层次标准。
如果这听起来有点消极,那确实如此。我从未见过基于文件系统且用户超过 5 人的复杂存储库在实践中长期有效。问题是,无论你设置什么类别,人们对它们的看法都会完全不同。因此,最后回答你的问题:
这样的事情存在吗?
不,我不这么认为。
如果没有,为什么没有?
我认为:对于只有少数用户的小型静态层次结构来说,这样做有点过头了。对于有许多用户的大型变化层次结构来说,这样做行不通,因为类别(=目录、文件夹)的概念无法扩展。
人们认为这是一个有价值的想法吗?
嗯,这是一个有趣的想法。要想知道人们是否会使用它,必须有人实现它。.filing
您可以将该信息存储在备用数据流中而不是文件中(是的,文件夹也可以有 ADS)。您可以在 Linux 和 OSX 上使用扩展属性。最大的问题可能是修补文件浏览器。
答案2
答案3
你的想法有一定道理,但我担心当你需要这样的东西时,它实际上意味着你需要一些更结构化的东西。例如,CMS,可能只是轻量级的,但绝对不仅仅是一个文本文件。
特别是当您想将特定文档(以及其包含的文件夹)的写入(甚至访问)限制到您的部分用户群时。
你不需要指定操作系统,但有优秀的(免费)产品,如露天这也许比您当前的设置更适合您。
答案4
有个想法。编写一个脚本,询问用户有关文件的各种问题和/或在文件内容本身中进行一些匹配,然后推荐文件放置位置或将文件放置在那里。脚本可以简单也可以复杂,这取决于你想要什么。
该脚本充当文件管理系统、决策支持系统和文件系统层次结构的动态文档。如果您仔细想想,Linux 文件系统层次结构标准就有点神话色彩,因为不同发行版之间存在很大差异。然而,大多数 Linux/Unix 用户实际上不必自己了解文件系统层次结构,因为系统中安装的各种软件都以标准化方式管理层次结构(包管理器、配置工具等)。各种应用程序框架也会创建脚本来管理其目录,例如 django 有管理命令来创建新项目、新应用程序模块或压缩迁移文件等。
这还有一个额外的好处,即如果需要以多种方式搜索文件,脚本可以创建各种符号链接,例如基于文件作者或创建日期或任何业务规则的索引。您可以使用符号链接模拟标记。标签只是来自目录的符号链接tags
,因此tags/mytag/myfile
可能是指向的符号链接actual/myfile
。
此外,无需改变用户界面就可以改变文件系统层次结构。
文件系统是一种数据库。不是关系数据库,而是分层数据库。把它想象成管理数据库,你并不想要求人们学习关系结构,而是希望应用程序向用户呈现他们需要执行的各种任务(例如,您是否在做每月的 XYZ 报告,很好,然后将其放在此文件夹中,并创建此符号链接,然后您需要修改另一个文件以记录您已完成本月的报告,等等)。