真正的动态文件夹(不是“智能文件夹”SavedSearch)可能吗?


1

我正在使用一个应用程序加载音频样本文件夹的内容供我使用。我想要使​​用的样本分散在我的机器上的许多文件夹中,我不想先将它们全部复制到一个文件夹中。

别名工作得很好,我能够制作所有所需文件的符号链接,将它们放在一个文件夹中,然后加载该文件夹。优秀的解决方案,除了一件事。

随着时间的推移,我将添加更多符合我用于此应用程序的标准的文件。我希望能够使用一个基本上是“智能文件夹”的动态文件夹,除了真正的文件夹。Mac“智能文件夹”实际上根本不是一个文件夹,但实际上只是创建了一个“SavedSearch”文件,除了Finder之外它是不可读的,所以我的应用程序无法看到它。

是否有可能创建一个真正的动态文件夹,只会随着文件系统的变化而更新?或者也许是实时会是一个太大的压力,所以按计划?我可以看到可能在Automator中调制一些东西,但是...我听起来有点沉重。喜欢知道是否有更好的方法!


用户友好的应用程序不需要这样:在项目文件(或文件夹)中收集样本或样本库的链接,或者 - 如果需要 - 将样本从应用程序内部导出/复制到用户指定的文件夹。请添加应用名称!
klanomath 2017年

它实际上是一个名为DrumFoldr的插件,我在Ableton Live主机软件中使用它。这不是“用户友好性”的问题。此插件为Ableton添加了一个非常有用的功能,因为否则无法加载包含128个以上文件的采样器。这实际上与相关软件无关。我需要真正的动态,更新文件夹,我问这是否可能,如果可能,如何。
Jonathan van Clute

“用户友好”我的意思是:超越分层文件系统的限制,选择更加数据库驱动的方法。部分已经在macOS中使用(Spotlight)-API实现了这一点。如果主机应用程序(或插件)不访问此API,则通常选择“项目文件”或基于文件/文件夹(例如“收集输出”(QuarkXPress))方法。您选择样本的标准是什么?如何浏览它们?您始终可以构建(Automator)服务:将声音文件链接到特定文件夹。
klanomath 2017年

在Ableton Live中我可以装载鼓机和样品 - 最多128个。这是设计的最大可能性。但是通过插件可以加载任意数字(或者在这种情况下是整个文件夹),只需在播放音乐时使用旋钮滚动它们,这样您就可以在上下文中听到不同的样本。该插件允许我选择样本文件夹,但它必须是真正的文件夹(或别名),而不是SavedSearch文件。我想要一个动态文件夹,其中包含长度不超过2秒的所有音频文件,并且“智能文件夹”不起作用。希望有道理。
Jonathan van Clute

我已经得到了thanx ;-)(因为我访问了ldmdesign网站并阅读了插件描述)。样本数量似乎限制在5000个/文件夹中。
klanomath 2017年

Answers:


2

我找到了一个创建动态“软链接”文件夹的解决方案:

前言:

  • $ HOME是环境变量HOME的结果。以用户example_user身份登录时,$ HOME是example_user:/ Users / example_user 的主文件夹的路径。如果$ HOME出现在下面的文本中,则必须使用/ Users / your_user_name /替换它(例如,保存启动代理)。如果$ HOME出现在下面的代码框中(例如在shell脚本中),它将在执行脚本时由(bash)shell自动扩展到您的主文件夹。
  • mdimport -A|sed $'s/\t\t/;/g;s/(null)//g'|tr -d \' 显示了许多元数据属性可供选择作为搜索条件(例如kMDItemAudioBitRate或kMDItemDurationSeconds)
  • mdls /path/to/file 列出所选文件的所有元数据属性

创建动态链接文件夹:

  • 在$ HOME / bin / sh /中创建一个shell脚本samples.sh,其中包含以下内容:

    #!/bin/bash
    
    # Define folders
    # Source folder (including files in subfolders)
    MusicSamples=$HOME/Music/Samples
    # Destination folder
    DrumFoldr=$HOME/Desktop/Samples
    
    # Remove orphaned soft links in the destination folder
    find $DrumFoldr -type l -exec sh -c 'for x; do [ -e "$x" ] || rm "$x"; done' _ {} +
    
    # Add soft links in destination folder depending on some criteria (here: BitRate and UserTag)
    for File in $(mdfind -onlyin $MusicSamples 'kMDItemAudioBitRate >= "44000"  && _kMDItemUserTags = "Sample"')
    do
        ln -s $File $DrumFoldr
    done
    
    # Remove soft links in the destination folder depending on some criteria (removing UserTag from original file)
    for File in $(mdfind -onlyin $MusicSamples '_kMDItemUserTags != "Sample"')
    do
        filename=$(basename "$File")
        rm $DrumFoldr/$filename
    done
    

    在shell脚本中定义包含示例文件的音乐文件夹(在我的示例中,这是Music文件夹中的Samples文件夹)和稍后包含软链接的“DrumFoldr”(在我的示例中是我桌面上的Samples文件夹)。

    现在选择一些Spotlight搜索条件(在我的示例中,我选择了比特率和用户定义的标签“Sample” - 您可以通过右键单击文件>标签...来定义用户标签,并通过编写标签来添加标签。然后,用户定义的标签可用于其他文件和文件夹。

    在此输入图像描述

    上述shell脚本将只添加的文件与44000或更高的采样率(这是一个逻辑和!)与用户标签“样本”软链接DrumFoldr文件夹。因此,目标文件夹包含指向没有Sample标签但采样率为96k的文件的链接,或者包含Sample标签但没有kMDItemAudioBitRate的文件(如txt文件或pdf)。它还在DrumFoldr文件夹中进行了一些清理。

    BTW:可以使用密钥kMDItemDurationSeconds:来搜索/确定音乐长度kMDItemDurationSeconds <= "2"

  • 在$ HOME / Library / LaunchAgents(表示:)中创建文件usr.samplesync.plist,/Users/<username>/Library/LaunchAgents/内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>Label</key>
        <string>usr.samplesync</string>
        <key>ProgramArguments</key>
        <array>
            <string>/bin/bash</string>
            <string>/Users/<username>/bin/sh/samples.sh</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>StartInterval</key>
        <integer>10</integer>
    </dict>
    </plist>
    

    替换<username>为您的短用户名。shell脚本将每10秒执行一次。您可以根据需要和环境将间隔增加到更高的值(例如60 = 1分钟或600 = 10分钟)

  • 加载启动代理程序:

    launchctl load $HOME/Library/LaunchAgents/usr.samplesync.plist
    

如果要将shell脚本保存在其他位置,则必须相应地应用plist中的路径。


注意事项:

  • 原始样本文件的路径或文件名中不能包含空格(我稍后尝试解决此限制)
  • 不得移动原始样本文件或删除用户标记不会删除软链接

需要改进的地方:

  • 如果已经存在正确的链接,请不要创建软链接

哇很酷!! 对于我自己,我不想要标签要求,因为每次我得到更多样本时我都必须手动添加。此外,许多样本的名称中也有空格。我是否正确,这实际上是在我的整个示例文件夹中创建每个文件的符号链接(递归?),并删除那些不符合条件的文件?这有点重,因为我的“samples”文件夹还包含很多其他文件(合成补丁,PDF,嵌套文件夹等),所以这将是创建/删除的TON。很好的答案,但我不确定我可以在我目前的设置中使用它。
Jonathan van Clute

老鼠,脚本无法处理我的驱动器名称中有空格,即使它已被逃脱: MusicSamples=/Volumes/AUDIO_2TB/Audio\ Libraries/_Free/Audio/
Jonathan van Clute

@JonathanvanClute试过 - 不应该工作!我还测试了一个也失败的阵列结构,我想我稍后会在这里问一个关于这个问题的问题。
klanomath 2017年

哇有趣......它确实有效,因为它会创建一堆文件,甚至会删除那些缺少标记的文件(在我的情况下都是这些文件),但是它创建的内容都是错误的,甚至都没有一点都不 很奇怪。这是我目前的代码: https://pastebin.com/FQ3uT8XF
Jonathan van Clute

好吧,我已经将等式中的空格作为测试,并且脚本工作正常,生成的符号链接正确且可用。所以这只是为了确认路径中的处理空间似乎是唯一的问题。
Jonathan van Clute 2017年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.