1 votos

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

Estoy tratando de escribir un script que seleccione todas las no carpetas en una determinada ventana del Finder que está en la vista de lista y ha revelado/expandido todas las subcarpetas (ver imagen).

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

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

También estoy dispuesto a empezar sin nada seleccionado y luego añadir las no carpetas a mi selección.

En cualquier caso, estoy perplejo. Se agradecería cualquier ayuda.

El resultado deseado sería similar a este:

enter image description here

EDIT: (para responder al problema de xy - va a ser largo, pero lo has pedido)

Me gano la vida reparando ordenadores, lo que significa que hago un montón de "Copia de seguridad de los datos, borrar el disco duro, instalar el sistema operativo, restaurar los datos" todo el tiempo. Tanto en Windows como en Mac, aunque hago todas las copias de seguridad en mi Mac, por lo que los datos del cliente se restauran desde un volumen del Mac a través de la red.

Normalmente, sólo arrastro carpetas enteras desde el volumen de la copia de seguridad al PC con Windows restaurado y espero a que termine. Sin embargo, a veces la copia falla, a menudo porque "el nombre de la ruta es demasiado largo" o alguna tontería por el estilo. En esos casos, acabo copiando trozos más pequeños cada vez hasta que termino.

Luego tengo que comprobar y volver a comprobar que no me he dejado ningún archivo/carpeta. Así que abro dos ventanas, una con la carpeta de origen y otra con la de destino. Y comparo las carpetas (Music, Docs, etc.) de cada una. Miro si el número de archivos/carpetas coincide y si la cantidad de bytes utilizados es la misma.

A menudo, debido al .DS_Store en las carpetas de Mac, los bytes no coinciden. Si abro la carpeta y Get Summary Info en sólo el contenido, los recuentos de bytes coinciden perfectamente.

Así que, en lugar de abrir docenas o cientos de carpetas y subcarpetas, una por una, lo que hago es abrir el Documents carpeta, por ejemplo, en la vista de lista, revelar todas las subcarpetas (esto ya lo puedo hacer en AppleScript) y luego Select All y deseleccionar 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, me lleva mucho tiempo e inevitablemente, justo antes de deseleccionar las últimas 10 carpetas, hago un clic erróneo y tengo que volver a empezar.

Por eso quiero un script que seleccione todas las no carpetas.

Si hay otra solución, genial. Déjenme escucharla.

0voto

siva Puntos 23

Lamentablemente, Finder no permite revelar los archivos de esta manera.

El siguiente código establece 'theFiles' a los archivos en el directorio elegido, pero 'reveal' no soporta ningún parámetro. Si ya tiene la ventana abierta, selecciona los archivos en root de la carpeta elegida en esa ventana, pero luego abre una ventana para cada otra carpeta recursivamente.

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

Sigo sintiendo que esto es más bien una Problema XY sin embargo.

0voto

Baczek Puntos 150

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 ser seleccionados antes de ejecutar el script.
  • Lento en la enorme 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 elementos)

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X