Il filtro smart folder "non contiene"

9

Cartella Escludi cartella intelligente

In definitiva voglio che il risultato di questo comando find sia una cartella intelligente.

I criteri non sono così complicati:

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

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

Il problema è che l'elenco degli operatori per i criteri delle smart folder sembra privo di un'opzione does not contain .

Le opzioni disponibili sono:

  • incontri
  • contiene
  • inizia con
  • termina con
  • è
  • non è

È possibile realizzare questo e se sì, allora 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 smart folder, ma non riesco a escludere con successo la cartella node_modules. Non è chiaro quali criteri utilizzare ma nessuno di quelli che ho provato sembra funzionare:

  • Contenitore documenti
  • Contenenti nomi di cartelle
  • Nome cartella

Ho provato a combinarli con i seguenti operatori:

  • contiene
  • incontri

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 filtri, operatori e termini precedenti.

La documentazione è così scarsa sull'argomento.

    
posta ogc-nick 04.06.2014 - 04:12
fonte

2 risposte

2

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

no-results-in-spotlight-in-search-against -kmditempath

Alcune potenziali alternative sono discusse qui:

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

    
risposta data 04.06.2014 - 14:24
fonte
1

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

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

L'Applescript per fare ciò è sotto. Qui sembra brutto, ma prova ad incollarlo nello 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
    
risposta data 29.03.2017 - 23:54
fonte

Leggi altre domande sui tag