Filtro de carpeta inteligente "no contiene"

9

Carpeta inteligente Excluir carpeta

En última instancia, quiero que el resultado de este comando de búsqueda sea una carpeta inteligente.

Los criterios no son tan complicados:

  • el nombre debe ser "README.md"
  • el tipo debe ser archivo
  • la ruta no debe contener "node_modules"

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

El problema es que la lista de operadores de criterios de carpetas inteligentes parece carecer de una opción does not contain .

Las opciones disponibles son:

  • coincidencias
  • contiene
  • comienza con
  • termina con
  • es
  • no es

¿Es posible lograr esto y, si es así, cómo?

Editar 1

Descubrí que al mantener presionada la tecla de opción puedo agregar una cláusula de negación a los criterios de búsqueda de la carpeta inteligente, pero parece que no puedo excluir con éxito la carpeta node_modules. No está claro qué criterios utilizar, pero ninguno de los que he probado parece funcionar:

  • Contenedor de documentos
  • que contienen nombres de carpetas
  • Nombre de la carpeta

He intentado combinar estos con los siguientes operadores:

  • contiene
  • coincidencias

y con los siguientes términos:

  • node_modules
  • node_modules

en caso de que admita búsquedas con comodines.

He probado todas las combinaciones de los filtros, operadores y términos anteriores.

La documentación es muy pobre en el tema.

    
pregunta ogc-nick 04.06.2014 - 04:12

2 respuestas

2

Parece que kMDItemPath no puede hacer lo que necesitas:

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

Algunas alternativas potenciales se discuten aquí:

cómo hacerlo -locate-a-file-in-spotlight-using-folder-and-file-name

    
respondido por el GraniteRobert 04.06.2014 - 14:24
1

Hay una solución, pero no es muy bonita. Sin embargo, servirá para sus propósitos si solo desea acceder a sus README en una carpeta (utilizando los criterios que ha especificado), y tiene alguna idea de de dónde provienen.

La idea es usar el script de shell para encontrar los archivos correctos y luego recopilar alias para cada archivo en un directorio. Luego, cambiamos el nombre de los alias para indicarnos a qué directorio principal pertenece el archivo original.

El Applecript para hacer esto está abajo. Parece feo aquí, pero intente pegarlo en el Editor de secuencias de comandos y compilarlo, y debería poder ver la lógica.

--- 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
    
respondido por el Delyle 29.03.2017 - 23:54

Lea otras preguntas en las etiquetas