1 votos

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

En última instancia, que quieren tener una función bash to-clipboard que se obtiene de las rutas de archivo y copia los archivos en el portapapeles. El uso de 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 \
        "$@"
}

No es este Applescript que, supuestamente, puede copiar varios archivos, pero no me gusta en absoluto:

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

Relacionadas con la pregunta:

Copia de archivos en el portapapeles usando applescript

4voto

qarma Puntos 71

Usted puede utilizar el AppleScript a continuación para crear una función bash que te permitirá añadir varios objetos de archivo en el portapapeles mediante el suministro de sus rutas de acceso de archivo como argumentos de línea de comandos. Devuelve true sobre el éxito y el false sobre el fracaso.

Usted no será capaz de pegar los elementos dentro de la terminal, pero si usted navegar a una ubicación en el Finder, puede pegar los elementos. Espero que esto sea a lo largo de las líneas de lo que fueron después.

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

Recomiendo guardar este script como .applescript o .scpt archivo en algún lugar de su máquina usando el Editor de secuencias de Comandos. A continuación, en el terminal, crear su función bash:

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

Entonces, para usar:

pbadd ~/Pictures/*.jpg
pbadd ~/Documents/Some\ file.pdf ~/Music/A\ Random\ Song.mp3

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