Applescript - come posso selezionare tutte le * non * cartelle in una finestra di visualizzazione elenco estesa?

1

Sto provando a scrivere uno script che selezionerà tutte le non-cartelle in una determinata finestra del Finder che si trova in List View e ha rivelato / espanso tutte le sottocartelle (vedi immagine).

Dato che ci sono molti più file che cartelle, il mio pensiero è:

  1. Seleziona tutti gli elementi
  2. Deseleziona tutte le cartelle

Sono anche disposto a iniziare con niente selezionato e quindi aggiungere non-cartelle alla mia selezione.

In ogni caso, sono perplesso. Qualsiasi aiuto sarebbe apprezzato.

Il risultato desiderato sarebbe simile a questo:

EDIT:(perrisponderealproblemaxy-saràlungo,matul'haichiesto)

Riparareicomputerpervivere,ilchesignificacheeseguomolti"dati di backup, cancella il disco rigido, installa SO, ripristini i dati" tutto il tempo. Windows e Mac, anche se eseguo tutti i backup sul mio Mac, quindi i dati del client vengono ripristinati da un volume Mac tramite la rete.

Solitamente, trascino solo intere cartelle dal volume di backup su PC Windows ripristinato e attendo che finisca. A volte, però, la copia fallisce, spesso perché "il percorso è troppo lungo" o alcune assurdità. In questi casi, finisco per copiare pezzi più piccoli alla volta finché non ho finito.

Quindi devo controllare e ricontrollare che non ho perso nessun file / cartella. Quindi, apro due finestre, una con la cartella di origine, l'altra con la cartella di destinazione. E confronto le cartelle (Musica, Documenti, ecc.) Da ciascuna. Cerco di vedere se il numero di file / cartelle corrisponde e che la quantità di byte utilizzati è la stessa.

Spesso, a causa di .DS_Store nelle cartelle Mac, i byte non corrispondono. Se apro la cartella e Get Summary Info solo sui contenuti, i conteggi dei byte corrispondono perfettamente.

Quindi, piuttosto che aprire dozzine o centinaia di cartelle e sottocartelle, una alla volta, quello che faccio è aprire la cartella Documents , ad esempio, nella visualizzazione elenco, rivelare tutte le sottocartelle (questo posso già fare in AppleScript ) e poi I Select All e deseleziona le cartelle, quindi Get Summary Info .

Nella mia immagine qui sopra, potrei farlo manualmente, ovviamente. Ma, in molti casi, ho cartelle con centinaia di file e diverse cartelle in profondità. Se lo faccio manualmente, ci vuole molto tempo e inevitabilmente, proprio prima di deselezionare le ultime 10 cartelle, farò un clic errato e dovrò ricominciare tutto da capo.

Ecco perché voglio che uno script selezioni tutte le non cartelle.

Se c'è un'altra soluzione, bene. Fammi sentire.

    
posta Zonker.in.Geneva 07.12.2015 - 15:01
fonte

2 risposte

0

Se tutte le cartelle sono esaurite nella visualizzazione elenco, ecco due soluzioni.

Prima soluzione:

Questo 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

Contro:

  • Tutti gli elementi devono essere selezionati prima di eseguire lo script.
  • Rallenta sull'enorme elenco di elementi.

Seconda soluzione:

Questo 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
  • Non è necessario selezionare tutti gli elementi nella visualizzazione elenco.
  • Veloce (1,5 secondi su 8500 articoli)
risposta data 08.12.2015 - 20:52
fonte
0

Sfortunatamente, Finder non supporta la visualizzazione di file in questo modo.

Il seguente codice imposta "theFiles" sui file nella directory scelta, ma "reveal" non supporta alcun parametro. Se hai già la finestra aperta, seleziona i file nella cartella principale della cartella scelta in quella finestra, ma poi apre una finestra per ogni altra cartella in modo ricorsivo.

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

Ho ancora la sensazione che questo sia più di un problema XY .

    
risposta data 07.12.2015 - 17:09
fonte

Leggi altre domande sui tag