Wie kopiere ich mehrere Dateien programmgesteuert in die Zwischenablage von macOS?

1

Letztendlich möchte ich eine Bash-Funktion, to-clipboarddie Dateipfade abruft und die Dateien in die Zwischenablage kopiert. Es ist in Ordnung, andere Skriptsprachen als Helfer zu verwenden. Ich habe momentan folgendes zum Kopieren einer einzelnen Datei:

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

Es gibt dieses Applescript, das angeblich mehrere Dateien kopieren kann, aber es gefällt mir überhaupt nicht:

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

Verwandte Frage:

Kopieren von Dateien in die Zwischenablage mit AppleScript

Glückliches Gesicht
quelle
Können Sie erklären, was Sie an der Bash-Eingabeaufforderung eingeben möchten und was die Zwischenablage danach enthalten soll? (Mir ist nicht klar, ob Sie den Dateipfad in der Zwischenablage oder den Inhalt der Datei usw. sehen möchten.) Haben Sie den Befehl auch gesehen pbcopy?
Ashley

Antworten:

3

Mit dem folgenden AppleScript können Sie eine Bash-Funktion erstellen, mit der Sie der Zwischenablage mehrere Dateiobjekte hinzufügen können, indem Sie deren Dateipfade als Befehlszeilenargumente angeben. Es kehrt truenach Erfolg und falseMisserfolg zurück.

Sie können die Elemente nicht im Terminal einfügen. Wenn Sie jedoch zu einem Ort im Finder navigieren , können Sie die Elemente dort einfügen. Ich hoffe, das entspricht genau dem, wonach Sie gesucht haben.

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

Ich würde empfehlen, dieses Skript mit dem Skript-Editor als .applescriptoder .scpt-Datei auf Ihrem Computer zu speichern . Dann erstellen Sie in Ihrem Terminal Ihre Bash-Funktion:

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

Dann verwenden Sie:

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