Applescript - ¿cómo puedo seleccionar todas las carpetas * no * en una ventana de vista de lista expandida?

1

Estoy intentando escribir un script que seleccionará todas las no carpetas en una ventana del Finder determinada que se encuentra en la Vista de lista y ha revelado / expandido todas las subcarpetas (ver imagen).

Como suele haber muchos más archivos que carpetas, mi pensamiento es:

  1. Seleccionar todos los artículos
  2. Deseleccionar todas las carpetas

También estoy dispuesto a comenzar con nada seleccionado y luego agregar carpetas a mi selección.

En cualquier caso, estoy perplejo. Cualquier ayuda sería apreciada.

El resultado deseado se vería similar a esto:

EDITAR:(pararesponderalproblemaxy-vaaserlargo,perolopediste)

Reparocomputadorasparaganarmelavida,loquesignificaquehagounmontónde"Copia de seguridad de datos, borrado de disco duro, instalación de SO, restauración de datos" todo el tiempo. Tanto Windows como Mac, aunque hago todas las copias de seguridad en mi Mac, por lo que los datos del cliente se restauran desde un volumen de Mac a través de la red.

Por lo general, solo arrastro carpetas enteras desde el volumen de respaldo a la PC con Windows restaurada y espero a que termine. A veces, sin embargo, la copia falla, a menudo porque "la ruta de acceso es demasiado larga" o algo así. En tales casos, termino copiando trozos más pequeños a la vez hasta que termine.

Luego tengo que verificar y volver a verificar que no haya perdido ningún archivo / carpeta. Entonces, abro dos ventanas, una con la carpeta de origen y la otra con la carpeta de destino. Y comparo carpetas (música, documentos, etc.) de cada uno. Miro para ver si la cantidad de archivos / carpetas coincide y si la cantidad de bytes utilizados es la misma.

A menudo, debido a .DS_Store en las carpetas de Mac, los bytes no coinciden. Si abro la carpeta y Get Summary Info solo en el contenido, los conteos de bytes coinciden perfectamente.

Entonces, en lugar de abrir docenas o cientos de carpetas y subcarpetas, una por una, lo que hago es abrir la carpeta Documents , por ejemplo, en la vista de lista, revelar todas las subcarpetas (esto es lo que ya puedo hacer en AppleScript ) y luego I Select All y deselecciono las carpetas, y luego Get Summary Info .

En mi imagen de arriba, podría hacerlo manualmente, por supuesto. Pero, en muchos casos, tengo carpetas con cientos de archivos y varias carpetas de profundidad. Si lo hago manualmente, lleva mucho tiempo e inevitablemente, justo antes de anular la selección de las últimas 10 carpetas, haré un clic errante y tendré que empezar de nuevo.

Por eso quiero que una secuencia de comandos seleccione todas las no carpetas.

Si hay otra solución, genial. Déjame escucharlo.

    
pregunta Zonker.in.Geneva 07.12.2015 - 15:01

2 respuestas

0

Si todas las carpetas se gastan en la vista de lista, aquí hay dos soluciones.

Primera solución:

Este AppleScript

my deselectAllFolders()

on deselectAllFolders()
    script o
        property sel : {}
    end script
    tell application "Finder"
        set o's sel to selection as alias list
        set tc to count o's sel
        repeat with i from 1 to tc
            if class of item (item i of o's sel) is folder then set item i of o's sel to missing value
        end repeat
        set selection to aliases of o's sel -- select all items without folders
    end tell
    return "" -- to not put all files into the result (it's very slow to show an huge list in the editor )
end deselectAllFolders

Contras:

  • Todos los elementos deben seleccionarse antes de ejecutar el script.
  • Lentamente en una gran lista de artículos.

Segunda solución:

Este AppleScript

set pScript to "from Foundation import NSFileManager, NSURL, NSDirectoryEnumerationSkipsHiddenFiles, NSURLIsDirectoryKey, NSURLIsPackageKey; from ScriptingBridge import SBApplication
def procFolder(fold):
    p = df.contentsOfDirectoryAtURL_includingPropertiesForKeys_options_error_(fold, [NSURLIsDirectoryKey, NSURLIsPackageKey], NSDirectoryEnumerationSkipsHiddenFiles, None)[0]
    for f in p:
           r=f.getResourceValue_forKey_error_(None, NSURLIsPackageKey, None)
           if r[0] and r[1]:
               allFiles.append(f)
           else:
               r=f.getResourceValue_forKey_error_(None, NSURLIsDirectoryKey, None)
               if r[0] and r[1]:
                     procFolder(f)
               else:
                     allFiles.append(f) 

allFiles = []
df=NSFileManager.defaultManager() 
finderApp = SBApplication.applicationWithBundleIdentifier_(\"com.apple.finder\")
tPath = finderApp.FinderWindows()[0].target().get()
procFolder(NSURL.URLWithString_(tPath.URL()))
finderApp.setSelection_(allFiles)"

do shell script "/usr/bin/python -c " & quoted form of pScript
  • No es necesario seleccionar todos los elementos en la vista de lista.
  • Rápido (1.5 segundos en 8500 artículos)
respondido por el jackjr300 08.12.2015 - 20:52
0

Desafortunadamente, Finder no admite la revelación de archivos de esta manera.

El siguiente código establece 'theFiles' a los archivos en el directorio elegido, pero 'reveal' no admite ningún parámetro. Si ya tiene la ventana abierta, selecciona los archivos en la raíz de la carpeta elegida en esa ventana, pero luego abre una ventana para todas las demás carpetas recursivamente.

tell application "Finder"
  set theFiles to get every item of (entire contents of folder (choose folder)) whose kind ≠ "Folder"
  reveal theFiles
end tell

Todavía siento que esto es más un problema XY

    
respondido por el grg 07.12.2015 - 17:09

Lea otras preguntas en las etiquetas