El filtro de carpeta inteligente "no contiene"


13

Carpeta inteligente Excluir carpeta

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

Los criterios no son tan complicados:

  • el nombre debe ser "README.md"
  • 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 does not containopción.

Las opciones disponibles son:

  • partidos
  • contiene
  • empieza con
  • termina con
  • es
  • no es

¿Es posible lograr esto? De ser 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 usar, pero ninguno de los que he intentado parece funcionar:

  • Contenedor de documentos
  • Conteniendo nombres de carpetas
  • Nombre de la carpeta

He intentado combinar estos con los siguientes operadores:

  • contiene
  • partidos

y con los siguientes términos:

  • nodo_módulos
  • nodo_módulos

en caso de que admita búsquedas con comodines.

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

La documentación es muy pobre sobre el tema.

ingrese la descripción de la imagen aquí


2
¿Has encontrado una solución?
gota

Respuestas:


2

Parece que kMDItemPath no puede hacer lo que necesita:

no-results-in-spotlight-in-búsquedas-contra-kmditempath

Algunas posibles alternativas se discuten aquí:

cómo-localizar-un-archivo-en-spotlight-using-folder-and-file-name


1
Gracias, pero ya tengo una función de línea de comando que recupera los archivos que me interesan y estoy haciendo una carpeta inteligente, sin hacer una búsqueda destacada. Me he encontrado con la limitación de mkdItemPath.
km6zla

Spotlight Search y Smart Folders utilizan el mismo mecanismo interno. kMDItemPath no funcionará en ninguna de estas interfaces de usuario.
GraniteRobert

1

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

La idea es usar su 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 decirnos a qué directorio padre pertenece el archivo original.

El Applescript para hacer esto está abajo. Aquí se ve feo, pero intente pegarlo en el Editor de scripts 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

No sé si esto funciona. +1 por incluso haberlo inventado. No estoy dispuesto a llegar tan lejos para hacer una carpeta Léame.
km6zla
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.