智能文件夹过滤器“不包含”


13

智能文件夹排除文件夹

最终,我希望此find命令的结果是一个智能文件夹。

标准并不那么复杂:

  • 名称应为“ README.md”
  • 类型应该是文件
  • 路径不应包含“ node_modules”

find /Users/me/Documents -type f -name README.md -not -path "*/node_modules/*"

问题在于智能文件夹标准操作员列表似乎缺少does not contain选项。

可用的选项有:

  • 火柴
  • 包含
  • 开始于
  • 以。。结束
  • 不是

是否有可能做到这一点?

编辑1

我发现通过按住Option键可以在智能文件夹搜索条件中添加否定子句,但似乎无法成功排除node_modules文件夹。目前尚不清楚使用哪种标准,但我尝试过的标准似乎都无效:

  • 文件容器
  • 包含文件夹名称
  • 文件夹名称

我尝试将这些与以下运算符结合使用:

  • 包含
  • 火柴

并具有以下术语:

  • node_modules
  • node_modules

如果它支持通配符搜索。

我已经尝试了上述过滤器,运算符和术语的所有组合。

关于这个主题的文档太差了。

在此处输入图片说明


2
您找到解决方案了吗?
高塔2015年

Answers:


2

看来kMDItemPath无法满足您的需求:

没有发现针对kmditempath的搜索结果

这里讨论了一些潜在的替代方法:

如何使用文件夹和文件名在聚光灯下定位文件


1
谢谢,但是我已经有了一个命令行功能,可以检索我感兴趣的文件,并且我正在制作智能文件夹,而不是进行聚光灯搜索。我遇到了mkdItemPath的限制。
km6zla 2014年

Spotlight搜索和智能文件夹使用相同的内部机制。kMDItemPath在这两个用户界面中均不起作用。
花岗岩罗伯特·罗伯特(Robert

1

有一种解决方法,但是它不是很漂亮。但是,如果您只想访问一个文件夹(使用您指定的条件)中的自述文件,并且对它们的来源有所了解,它将满足您的目的。

这个想法是使用您的Shell脚本找到正确的文件,然后在一个目录中为每个文件收集别名。然后,我们重命名别名以告诉我们原始文件属于哪个父目录。

下面是执行此操作的Applescript。在这里看起来很丑,但是尝试将其粘贴到脚本编辑器中并进行编译,您应该能够看到逻辑。

--- Set up the name of the folder to contain search results
set myFolder to POSIX file "/Users/me/SmartFolder"

--- Clear the folder of contents. Then we will see only the results of an updated search
tell application "Finder"
    display dialog "WARNING. This will delete all files below " & (POSIX path of myFolder) & " . Are you sure you want to continue?"
    delete (every item of folder myFolder)
    --- alternatively, if you want to keep your script in the same folder, replace the line above with
    --- delete ((every item of folder myFolder) whose name does not end with ".scpt")
end tell

--- The shell command that is doing all the searching
set FileList to do shell script "find /Users/me/Documents -type f -name README.md -not -path '*/node_modules/*'"

--- The rest of the script takes each file and makes an alias in our folder containing search results. The aliases are renamed according to "ParentDirectory_filename"
set FileList to paragraphs of FileList
repeat with CurrentFile in FileList
    set ASCurrentFile to POSIX file CurrentFile
    set PathList to words of (ASCurrentFile as string)
    --- Make the new name include the Parent Directory and file name
    set NewName to (item -2 of PathList) & "_" & (item -1 of PathList)
    tell application "Finder"
        make new alias file at myFolder to ASCurrentFile
        --- We need to save the name/location of the new alias file before we can try to rename it
        set NewAlias to result
        set i to 1
        repeat
            try
                --- Try to rename the alias. Won't work if there's already an alias with the new name
                set name of NewAlias to NewName
                exit repeat
            on error
                --- Append a number to the alias. Increase the number for more duplicates
                if i is not equal to 1 then
                    set NewName to text 1 thru -3 of NewName
                end if
                set NewName to NewName & " " & i
                set i to (i + 1)
            end try
        end repeat
    end tell
end repeat

我不知道这行不通。+1甚至拿出它。我不愿意做一个自述文件夹。
km6zla
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.