虚拟文件夹

在计算机领域，虚拟文件夹（Virtual folder）通常指管理一批文件的一个虚拟的文件夹，它不依赖于目录树层级中的位置，而是由软件将数据存储中的结果合并显示。这可能是一个数据库或自定义索引，然后在文件夹视图中以可视方式呈现它们。虚拟文件夹可以被认为是列出具有特定标记文件的一个视图，在需要时即时将动态内容模拟为一个文件夹并呈现。在计算机科学中有几个相似的理念，包括已保存的搜索、已保存的查询和过滤等。

## 技术

虚拟文件夹为用户提供一种更方便方法管理一批内容相关的文件。根据用户所需的特定标准的或所有的文件被聚合到一个虚拟文件夹。虚拟文件夹中的文件不限于硬盘上的某个物理位置，也可能其他形式。事实上，虚拟文件夹中的文件甚至可以并未存储在硬盘上，它们可以是网络共享或自定义应用数据库中的内容，例如邮件或其他数据库。

文件“不能”被存储在虚拟文件夹中，因为那本质上只是一个文件存储的搜索查询。尝试存储文件到虚拟文件夹可能遇到多种情况，取决于软件实现，文件可能被重定向到某个物理存储空间。

大多数实现都会预先索引硬盘或特定位置上的文件以加速搜索，这样在搜索开始时可以查询索引以快速展现和完成搜索任务，避免等待索引和查询整个文件夹结构。

## 实现

虚拟文件夹可以是操作系统中的一种结构。BeOS包含一种被称为“已保存查询”的虚拟文件夹，这对虚拟文件夹在操作系统中的开发产生了影响（包括Mac OS X、Windows和Linux）。虚拟文件夹会在整个文件系统上执行搜索以动态填充内容，及使用子集或已缓存的搜索结果。

## 历史

### BeOS

此操作系统的首个开发者预览版发布于1995年10月，包括类似数据库的功能，使用户能更方便地管理自己的文件。为了此功能，文件系统会索引特定文件属性以帮助快速搜索。默认情况下，文件系统会自动索引文件名、大小和最后修改日期，当其他应用程序或用户告知时还可创建其他属性的索引。

当用户执行文件搜索时，在文件夹 "/boot/home/queries" 中会创建一个文件，文件名称根据查询内容和搜索的日期时间派生，例如“Name = Western Infirmary - Mar 21, 11:59:40 PM”。搜索的查询条件存储在被称为“qrystr”文件的一个属性中。当该文件被打开时，文件系统会查询索引和打开一个跟踪窗口，保持最新的匹配条件的文件列表。

更多搜索功能被添加到后续的版本中。Release 2引入了编辑已保存查询的功能，Release 3允许用户自己定义已保存查询的名称在1998年的Release 4之前，所有查询都会无限期存储。但从R4开始，BeOS开发者为所有查询引入了7天的时间限制。如果用户想将一个查询保留下来，他们可以在“查找”对话框取消“临时”标记。

### Mac OS X

BeOS文件系统的领头开发者之一Dominic Giampaolo曾参与苹果公司的Mac OS X操作系统并为其添加了虚拟文件夹系统。

2005年4月，苹果公司发布Mac OS X v10.4，其中就包括被称为“智能文件夹”的虚拟文件夹。这些文件夹实质上由Spotlight引擎动态更新以包含匹配特定条件的内容。例如，这可以给你带来一个特殊文件夹，其中包含所有包含关键词“shpadoinkle”且在最近7天曾经编辑的Word文档。智能文件夹是通过保存一个Spotlight搜索来创建，搜索条件记录在一个.savedSearch后缀的属性列表文件中，默认情况下保存在“/Users/username/Library/Saved Searches”文件夹。

在许多Spotlight引擎的应用程序中可以看到“智能文件夹”概念的变种，通常以紫色色调的齿轮图标标记。例如：邮件中的智能邮箱和通讯录中的智能组。

在没有Spotlight的Mac OS X早期版本中，iApps（iTunes和iPhoto）有一个类似的概念，但它们没有使用系统级的Spotlight引擎。

### Windows

2006年11月，微软发布Windows Vista，其中允许用户保存任何搜索查询为“搜索文件夹”，这就是一种虚拟文件夹。搜索文件夹的设计目的是用户不需要记住自己的文件存储在哪里。搜索文件夹不是物理文件夹，它本质上是一个XML文件，为Windows搜索子系统提供一个已定义查询的存储。正因如此，搜索文件夹可以在任何可创建普通文件夹的地方创建。类似的方法Windows XP中也存在，当Windows索引服务启用时，搜索可以保存为.fnd文件。但是，在Windows XP中的已保存搜索查询只保存了用户的搜索条件；用户仍需指定搜索位置并再次执行搜索，并且搜索结果非动态呈现。

无论何时访问“搜索文件夹”，它都会返回与已保存搜索查询相关的结果；结果清单中呈现的是实际的文件和文件夹。搜索查询的定义可基于许多参数和属性，包括文件名、指定日期、文件本身内容、相关元数据、文件类型、文件所在位置及其他各种属性。被称为“查询组件”的功能允许搜索者基于其他“搜索文件夹”进一步细分结果。

Windows Vista在默认情况下， references the profile of the user who originally created a saved search as part of the query's scope, which includes the disk partition. This design choice does not prevent saved searches from being shared with other users, but it prevents them from operating on different partitions or user profiles. 虽然用户可以手动修改已保存搜索的内容将引用范围改为%USERPROFILE%环境变量， which will enable it to operate on other machines or profiles regardless of the original author or location, 微软已发布一个“SearchMelt Creator”实用工具允许用户自动执行此流程。

在Windows Vista的早期开发版本中，这些为默认的用户配置文件夹预配置的“搜索文件夹”（例如文档、音乐和图片）取代了Windows开始菜单上的那些文件夹链接。在Windows文件资源浏览器中浏览时，导航面板会动态填充与当前查看视图相关的“搜索文件夹”；举一个例子，当查看“文档”文件夹时，导航面板会基于文档的作者、关键词、类型和最近更改的文档生成一个“搜索文件夹”。这些预发布版本的操作系统也包括其他虚拟文件夹，搜索都通过主要的“库”搜索文件夹聚合。微软的表示这种做法的目标是完全超越传统的物理文件夹概念，但公司收到的反馈显示大量用户对新的方式感到困惑/混乱。尤其是“搜索文件夹”被放在开始菜单导致人们相信它们是具有类似名称和内容的多个物理文件夹。

基于这种反馈，公司决定恢复在开始菜单上放置物理文件夹的链接，方法类似以前Windows版本的显示方式，并移除几个至Windows Vista发布到制造商时可用的“搜索文件夹”。尽管在界面上不那么明显，该操作系统仍包含几个预配置的搜索文件夹：最近的文档、最近的电子邮件、最近的音乐、最近的图片和视频、最近的更改以及“与我共享”，这些都是由一个“索引位置”搜索文件夹提供，实现了早期的“库”概念。

在Windows 7中，虚拟文件夹的概念被显著实现为“库”功能。类似“已保存的搜索”，“库”在本质上只是一个扩展名为 `.library-ms` 的XML文件，功能是收集具有特定属性的一批文件并在熟悉的文件夹风格界面上显示它们。库在文件资源管理器上进行了命名空间扩展，其XML文件可以在各Windows或网络上重用。

### GNOME

在GNOME 2.14中，已保存的搜索是一个虚拟文件夹，内容是Nautilus的搜索结果，内容来自多个后端。这些文件夹的内容在文件夹打开时会动态确定，并在文件被创建或修改时自动更新。

### 其他实现

#### 电子邮件客户端

虚拟文件夹是电子邮件客户端的一种常见设计结构。在1991年初，基于Emacs的邮件阅读器VM在其5.09版本中就已提供虚拟文件夹设计。VM允许用户使用规则定义虚拟文件夹，这可涉及一个或多个物理文件夹中的邮件内容，并可基于特定选择条件，如日期、作者、收件人、主题、邮件正文等。虚拟文件夹还可基于以前定义的虚拟文件夹创建，这样可以根据标准重复筛选Helix Code在2000年创建的Evolution邮件客户端也纳入了虚拟文件夹。可以创建文件夹并自动列出与用户定义规则匹配的邮件，例如列出所有涉及特定地址的邮件，或者所有包含特定关键词的邮件。Opera网络浏览器提供的新邮件客户端（2002年11月发布测试版，2003年1月发布正式版）同样提供虚拟文件夹（称之为访问点）用于电子邮件的管理。它的虚拟文件夹会自动基于活跃联系人、附件和已分配标签创建。虚拟文件夹也会因执行搜索而创建，并且手动虚拟文件夹可以使用多个逻辑邮件头完成自动分类（包括使用正则表达式）。Microsoft Outlook 2003添加了类似功能，称之为“搜索文件夹”。2004年Gmail的首个发布版本中，其所有邮件的管理就基于“标签”实现的虚拟文件夹。Mozilla Thunderbird也可以创建搜索文件夹，并允许搜索多个电子邮件账户。

#### 音乐客户端

2002年7月，苹果公司宣布iTunes 3提供“智能播放列表”功能，这可以被认为是一种虚拟文件夹。唯一的区别是搜索不是在文件系统的文件夹结构，而是在其内部的存储区。微软在2003年也在Windows XP的Windows Media Player 9中添加类似功能，称之为“自动播放列表”。