我在这里给出的例子是一个简单的媒体文件难题。
在此示例中,假设我有给定音频文件的多个版本:
SomeSongLibrary/
awesome-song-compressed.mp3
awesome-song-lossless.flac
awesome-song-raw-project-file.binaryblob
我还有一个媒体播放应用程序(例如 Jellyfin 或 Quodlibet 等),它实际上只在给定时间点对这些文件之一感兴趣。例如,Jellyfin 无法全局忽略特定文件,因此我们给定的精彩歌曲将显示两次(假设它不会错误地获取该二进制文件,我发现这种情况可能会发生!)。
这就是我的问题开始的地方,管理单个文件的多个“分叉”的愿望开始显现出来。
那么问题就变成了有什么方法可以以用户友好的方式解决这个问题(cli 被接受)?
我发现解决这个问题的最简单但最笨拙的方法是使用带有实际内容符号链接的隐藏文件夹 - 但显然文件扩展名无法匹配所需的链接。这个例子看起来像:
SomeSongLibrary/
awesome-song-link # symlink, points to files inside swap
.awesome-song-swap/
awesome-song-compressed.mp3
awesome-song-lossless.flac
awesome-song-raw-project-file.binaryblob
如果没有实用程序应用程序,这显然很容易出错,因为您需要为每个文件建立正确的链接。此外,您必须真正希望给定的 unix 应用程序根本不依赖于文件扩展名来确定文件类型(我希望是这种情况,但您不能保证这一点)并且该应用程序足够智能,可以跳过隐藏媒体扫描过程中的文件夹。
我想到的下一个解决方案是为每个文件夹使用一个 git 项目,并为每个文件类型或内容集合使用分支。因此,您可以为 制作一个 git 存储库,为每种类型的文件(、等)SomeSongLibrary
创建一个分支,然后当您想要访问给定文件的不同版本时在这些分支之间切换。SomeSongLibrary
mp3
flac
这在理论上很棒,但也很糟糕,因为 git 并不真正喜欢处理二进制文件。虽然二进制文件的成本并不比首先拥有多个副本差多少,但当您考虑更改的文件(例如awesome-song-compressed.mp3
正在更新的标签)时,情况并非如此。此外,我并不真正需要所有与完整版本控制系统相关的缺陷。最后,最好管理一个文件夹中的单个文件,而不是一次管理整个文件夹(因此不同的文件可以是不同的版本。)
所以这可能是一个不太可能的事情,但是有没有人遇到过这样的问题并提出一个聪明的解决方案(脚本或完整的应用程序?)此外,这是一个好主意还是它违背了 unix/posix 文件系统标准?