Smart-Ordner-Filter "enthält nicht"

13

Smart Folder Ordner ausschließen

Letztendlich möchte ich, dass das Ergebnis dieses Befehls find ein intelligenter Ordner ist.

Die Kriterien sind nicht so kompliziert:

  • Name sollte "README.md" sein
  • Typ sollte Datei sein
  • Pfad sollte nicht "node_modules" enthalten

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

Das Problem ist, dass in der Operatorliste der Kriterien für intelligente Ordner anscheinend keine does not containOption vorhanden ist.

Die verfügbaren Optionen sind:

  • Streichhölzer
  • enthält
  • beginnt mit
  • endet mit
  • ist
  • ist nicht

Ist dies möglich und wenn ja, wie?

Bearbeiten 1

Ich habe festgestellt, dass ich durch Halten des Optionsschlüssels eine Negationsklausel zu den Suchkriterien für intelligente Ordner hinzufügen kann, aber den Ordner node_modules scheinbar nicht erfolgreich ausschließen kann. Es ist unklar, welche Kriterien zu verwenden sind, aber keines der Kriterien, die ich ausprobiert habe, scheint zu funktionieren:

  • Dokumentencontainer
  • Enthält Ordnernamen
  • Ordnernamen

Ich habe versucht, diese mit den folgenden Operatoren zu kombinieren:

  • enthält
  • Streichhölzer

und mit folgenden Begriffen:

  • Knotenmodule
  • Knotenmodule

falls es Platzhaltersuchen unterstützt.

Ich habe alle Kombinationen der oben genannten Filter, Operatoren und Begriffe ausprobiert.

Die Dokumentation ist zu diesem Thema so schlecht.

Geben Sie hier die Bildbeschreibung ein

km6zla
quelle
2
Haben Sie eine Lösung gefunden?
Gota

Antworten:

2

Es sieht so aus, als ob kMDItemPath nicht das tun kann, was Sie brauchen:

Keine Ergebnisse im Scheinwerferlicht bei der Suche gegen kmditempath

Einige mögliche Alternativen werden hier diskutiert:

wie man eine Datei im Rampenlicht findet, indem man Ordner und Dateinamen verwendet

GraniteRobert
quelle
1
Vielen Dank, aber ich habe bereits eine Befehlszeilenfunktion, die die Dateien abruft, an denen ich interessiert bin, und ich erstelle einen intelligenten Ordner, ohne eine Spotlight-Suche durchzuführen. Ich bin auf die Einschränkung von mkdItemPath gestoßen.
km6zla
Spotlight Search und Smart Folders verwenden denselben internen Mechanismus. kMDItemPath funktioniert in keiner dieser Benutzeroberflächen.
GraniteRobert
1

Es gibt eine Problemumgehung, aber sie ist nicht sehr hübsch. Es dient jedoch Ihren Zwecken, wenn Sie nur in einem Ordner (unter Verwendung der von Ihnen angegebenen Kriterien) auf Ihre READMEs zugreifen möchten und eine Vorstellung davon haben möchten, woher sie stammen.

Die Idee ist, mit Ihrem Shell-Skript die richtigen Dateien zu finden und dann Aliase für jede Datei in einem Verzeichnis zu sammeln. Anschließend benennen wir die Aliase um, um uns mitzuteilen, zu welchem ​​übergeordneten Verzeichnis die Originaldatei gehört.

Das Applescript dazu finden Sie unten. Hier sieht es hässlich aus, aber versuchen Sie, es in den Skript-Editor einzufügen und zu kompilieren, und Sie sollten in der Lage sein, die Logik zu sehen.

--- 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
Delyle
quelle
Ich weiß nicht, ob das funktioniert. +1 für die Idee. Ich bin nicht bereit, so weit zu gehen, um einen Readme-Ordner zu erstellen.
km6zla