¿Cómo copio múltiples archivos al portapapeles de macOS mediante programación?

1

En última instancia, quiero tener una función de bash to-clipboard que obtenga rutas de archivos y las copie en el portapapeles. Usar otros lenguajes de scripting como ayudantes está bien. Actualmente tengo esto para copiar un solo archivo:

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

Existe este Applescript que supuestamente puede copiar varios archivos, pero no me gusta nada:

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

Pregunta relacionada:

Copiando archivos al portapapeles usando applescript

    
pregunta HappyFace 10.10.2018 - 18:47

1 respuesta

3

Puede usar el AppleScript a continuación para crear una función de bash que le permitirá agregar múltiples objetos de archivo al portapapeles al proporcionar sus rutas de archivo como argumentos de la línea de comandos. Devuelve true en caso de éxito y false en caso de error.

No podrá pegar los elementos dentro del terminal, pero si navega a una ubicación en Finder , puede pegar los elementos allí. Espero que esto sea similar a lo que buscabas.

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

Recomendaría guardar este script como un archivo .applescript o .scpt en algún lugar de su máquina usando Script Editor . Luego, en tu terminal, crea tu función bash:

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

Luego, para usar:

pbadd ~/Pictures/*.jpg
pbadd ~/Documents/Some\ file.pdf ~/Music/A\ Random\ Song.mp3
    
respondido por el CJK 13.10.2018 - 03:55

Lea otras preguntas en las etiquetas