Filtro smart folder "non contiene"


13

Cartella intelligente Escludi cartella

Alla fine voglio che il risultato di questo comando find sia una cartella intelligente.

I criteri non sono così complicati:

  • il nome dovrebbe essere "README.md"
  • il tipo dovrebbe essere file
  • il percorso non deve contenere "node_modules"

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

Il problema è che l'elenco degli operatori dei criteri per le cartelle smart sembra mancare di does not containun'opzione.

Le opzioni disponibili sono:

  • fiammiferi
  • contiene
  • inizia con
  • finisce con
  • è
  • non è

È possibile ottenere questo risultato e, in tal caso, come?

Modifica 1

Ho scoperto che tenendo premuto il tasto opzione sono in grado di aggiungere una clausola di negazione ai criteri di ricerca della cartella smart ma non riesco a escludere correttamente la cartella node_modules. Non è chiaro quali criteri utilizzare, ma nessuno di quelli che ho provato sembra funzionare:

  • Contenitore documenti
  • Contiene nomi di cartelle
  • Nome della cartella

Ho provato a combinarli con i seguenti operatori:

  • contiene
  • fiammiferi

e con i seguenti termini:

  • node_modules
  • node_modules

nel caso in cui supporti le ricerche con caratteri jolly.

Ho provato tutte le combinazioni dei suddetti filtri, operatori e termini.

La documentazione è così scarsa sull'argomento.

inserisci qui la descrizione dell'immagine


2
Hai trovato una soluzione?
gota,

Risposte:


2

Sembra che kMDItemPath non possa fare ciò di cui hai bisogno:

no-risultati-in-riflettori-in-ricerche-contro-kmditempath

Alcune potenziali alternative sono discusse qui:

how-to-localizzare-a-file-in-riflettori-con-cartella-and-file-name


1
Grazie ma ho già una funzione da riga di comando che recupera i file che mi interessano e sto realizzando una Smart Folder, non facendo una ricerca spotlight. Mi sono imbattuto nella limitazione di mkdItemPath.
km6zla

Ricerca Spotlight e Cartelle intelligenti utilizzano lo stesso meccanismo interno. kMDItemPath non funzionerà in nessuna di queste interfacce utente.
GraniteRobert,

1

C'è una soluzione alternativa, ma non è molto carina. Tuttavia, servirà ai tuoi scopi se desideri semplicemente accedere ai tuoi README in una cartella (utilizzando i criteri che hai specificato) e avere un'idea di da dove provengono.

L'idea è di usare lo script della shell per trovare i file giusti e quindi raccogliere gli alias per ciascun file in una directory. Quindi rinominiamo gli alias per dirci a quale directory principale appartiene il file originale.

L'Applescript per farlo è sotto. Sembra brutto qui, ma prova a incollarlo in Script Editor e compilarlo e dovresti essere in grado di vedere la logica.

--- 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

Non so se funziona. +1 anche per averlo inventato. Non sono disposto ad andare così lontano per creare una cartella readme.
km6zla
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.