Come posso copiare più file negli appunti di macOS a livello di programmazione?

1

Alla fine voglio avere una funzione bash to-clipboard che recuperi i percorsi dei file e copi i file negli appunti. L'utilizzo di altri linguaggi di scripting come helper è ok. Al momento ho questo per copiare un singolo file:

file-to-clipboard() {
    osascript \
        -e 'on run args' \
        -e 'set the clipboard to POSIX file (first item of args)' \
        -e end \
        "$@"
}

C'è questo Applescript che presumibilmente può copiare più file, ma non mi piace affatto:

set f to {(POSIX file "/path/to/a/folder/a.png"), (POSIX file "/path/to/another/folder/b.png")}
tell application "Finder"
    try -- to delete any old temp folder
        delete folder "AS_mailCopy" of (path to temporary items)
    end try
    set tmp to make new folder at (path to temporary items) with properties {name:"AS_mailCopy"}
    duplicate f to tmp
    select files of tmp
    activate
    tell application "System Events" to keystroke "c" using command down
    delete tmp
end tell

Domanda correlata:

Copia di file negli appunti usando il applescript

    
posta HappyFace 10.10.2018 - 18:47
fonte

1 risposta

3

Puoi utilizzare AppleScript di seguito per creare una funzione bash che ti consentirà di aggiungere più oggetti file negli appunti fornendo i loro percorsi di file come argomenti da riga di comando. Restituisce true in caso di successo e false in caso di fallimento.

Non sarai in grado di incollare gli elementi all'interno del terminale, ma se navighi in una posizione in Finder , puoi incollare lì gli elementi. Spero che questo sia in linea con quello che cercavi.

use framework "Appkit"
use Finder : application "Finder"

property this : a reference to current application
property NSFileManager : a reference to NSFileManager of this
property NSImage : a reference to NSImage of this
property NSMutableArray : a reference to NSMutableArray of this
property NSPasteboard : a reference to NSPasteboard of this
property NSString : a reference to NSString of this
property NSURL : a reference to NSURL of this

property pb : missing value

on run input
    if input's class = script then set input to ¬
        Finder's selection as alias list

    init()
    clearClipboard()
    addToClipboard(input)
end run


to init()
    set pb to NSPasteboard's generalPasteboard()
end init

to clearClipboard()
    if pb = missing value then init()
    pb's clearContents()
end clearClipboard

to addToClipboard(fs)
    local fs

    set fURLs to NSMutableArray's array()
    set FileManager to NSFileManager's defaultManager()

    repeat with f in fs
        if f's class = alias then set f to f's POSIX path
        set fp to (NSString's stringWithString:f)'s ¬
            stringByStandardizingPath()
        if (FileManager's fileExistsAtPath:fp) then ¬
            (fURLs's addObject:(NSURL's fileURLWithPath:fp))
    end repeat

    if pb = missing value then init()
    pb's writeObjects:fURLs
end addToClipboard

Consiglierei di salvare questo script come file .applescript o .scpt da qualche parte sulla tua macchina usando Script Editor . Quindi, nel tuo terminale, crea la tua funzione bash:

pbadd() {
    osascript "/Path/To/Saved AppleScript.scpt" "$@"
}

Quindi, per usare:

pbadd ~/Pictures/*.jpg
pbadd ~/Documents/Some\ file.pdf ~/Music/A\ Random\ Song.mp3
    
risposta data 13.10.2018 - 03:55
fonte

Leggi altre domande sui tag