Verwenden des Terminals zum Kopieren einer Datei in die Zwischenablage

159

Ich habe eine Datei auf dem Desktop, Dateiname ist ded.html. Um die Datei zu kopieren, klicke ich auf die Datei und drücke cmd + c.

Wie würde ich jetzt dasselbe mit dem Terminal machen?

wütende Kiwi
quelle
2
Meinen Sie damit, die Datei zu kopieren oder den Inhalt der Datei zu kopieren, damit der Inhalt eingefügt werden kann?
user151019

Antworten:

237

Wenn ich die Frage richtig verstehe, ist pbcopyund danach Sie pbpaste.

Öffne ein Terminal und mache:

$ cat ~/Desktop/ded.html | pbcopy

Diese Datei befindet sich nun in der Zwischenablage.

Um es woanders zu platzieren, das heißt, um es einzufügen, mache:

$ pbpaste > ~/Documents/ded.html

Jetzt sollten Sie eine Kopie von ded.html in ~ / Documents haben.

boehj
quelle
3
Dies ist ideal für die Arbeit mit Textdateien, schlägt jedoch fehl, wenn Sie versuchen, die Aufgabe mit Binärdateien auszuführen. Probieren Sie dies mit einem Bild aus, um zu sehen, was ich meine.
Itai Ferber
7
nach der Eingabe von $ cat ~ / Desktop / ded.html | pbcopy Ich kann cmd + v nicht zum Einfügen der Datei verwenden. Dachte, $ pbpaste> ~ / Documents / ded.html hat den Job gemacht.
Angry Kiwi
Sie können den Dateiinhalt auch in Ihrer OSX-Zwischenablage anzeigen, indem Sie das Finder-Menü Bearbeiten> Zwischenablage anzeigen aufrufen (in Yosemite getestet).
Dannid
Danke, weißt du, wie ich es gelesen und an den nächsten Befehl weitergeleitet habe? zB cat ~/.emulator_console_auth_token | auth <read_content>?
Dominic
Dadurch wird der Inhalt der Datei kopiert, nicht jedoch die Datei selbst.
8.
20

Die Antwort von Lri geht in die richtige Richtung, hat jedoch ein paar Schwachstellen: Es ist nicht erforderlich, Finder zu verwenden ( the clipboardist Teil von StandardAdditions OSAX), und die Angabe eines Handlers runist eine viel zuverlässigere Möglichkeit, Argumente über die Befehlszeile zu übergeben (seit 10.4). Das Durchführen dieser beiden Änderungen vereinfacht das "Entweichen", das durchgeführt werden muss, um das Programm in eine Shell einzugeben, erheblich.

Hier ist meine Version (umhüllt von einer Shell-Funktion - Sie können diese in (z. B.) Ihre einfügen .bashrc, um sie in Ihren Shells verfügbar zu machen):

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

file-to-clipboard ~/Desktop/ded.html

Eine Datei, die mit diesem Skript in die Zwischenablage verschoben wurde, kann dann in Finder eingefügt werden, um die Datei in einen anderen Ordner zu kopieren.

osascript kann auch als Hash-Bang-Interpreter verwendet werden (seit 10.5). Fügen Sie dies in eine Datei ein (zB file-to-clipboard)

#!/usr/bin/osascript
on run args
  set the clipboard to POSIX file (first item of args)
end

Machen Sie die Datei ausführbar ( chmod +x /path/to/where/ever/you/put/file-to-clipboard). Dann führe es so aus:

/path/to/where/ever/you/put/file-to-clipboard ~/Desktop/ded.html

Wenn es in einem Verzeichnis im PATH gespeichert ist, können Sie den Pfad zur „Skript“ -Datei weglassen.

Chris Johnsen
quelle
@Lri: Finder versteht das Offensichtliche nicht set the clipboard to {one,two}(obwohl ein anderes AppleScript-Programm die Liste erfolgreich extrahieren kann). Die StandardAdditions- Zwischenablage-Befehle können auf einzelne Elemente beschränkt sein.
Chris Johnsen
1
Würde es für mehrere Dateien funktionieren?
VitalyB
Hinweis: Der angegebene Pfad muss ein absoluter Pfad sein, damit das Skript funktioniert.
Leo
8

Es gibt keine Möglichkeit, das, was Sie versuchen, über die Befehlszeile zu erreichen. Apple bietet die Tools pbcopyund pbpastean, um das Kopieren von Text zu ermöglichen. Mit diesen Tools können Sie jedoch keine Datei in dem von Ihnen gewünschten Sinne kopieren.

Ohne auf zu viele technische Details einzugehen, kopieren Sie beim "Kopieren" einer Datei im Finder Cnicht die Datei selbst, sondern verweisen lediglich auf die Datei in der Zwischenablage und markieren sie als Dateireferenz. Wenn eine Anwendung diesen Verweis beim Einfügen erhält, ist sie dafür verantwortlich, die Dinge zu sortieren, herauszufinden, was Sie eingefügt haben, und letztendlich mit der Datei zu arbeiten, wie es passt. Wenn Sie eine Datei im Finder kopieren, wird der Pfad zu der Datei in einer bestimmten Weise in einer bestimmten Zwischenablage gespeichert. Beim Einfügen wird dieser Dateipfad empfangen und es wird bekannt, dass eine neue Datei mit dem Inhalt der Datei erstellt wird alte (kopieren Sie eine Datei in die Zwischenablage, löschen Sie sie, versuchen Sie, sie an einer anderen Stelle einzufügen und sehen Sie, was zum Beispiel passiert).

In diesem Sinne des Kopierens und Einfügens reichen die verfügbaren Werkzeuge nicht aus, um das zu tun, was Sie benötigen. Wie von boehj vorgeschlagen, können Sie versuchen, den Inhalt der alten Datei in eine neue zu kopieren, dies funktioniert jedoch nur für Textdateien. Alle Binärdateien, die Sie erhalten, werden beschädigt (versuchen Sie dies mit einem Bild - es wird beschädigt).

Die herkömmliche Befehlszeile schlägt auf diese Weise fehl, aber Sie können einen Blick darauf werfen, ob Sie dies in AppleScript tun möchten, und das dann über die Befehlszeile mit aufrufen osascript.

Itai Ferber
quelle
Du hast Recht mit Bildern usw. Daran habe ich nicht gedacht. Ich glaube, ich habe die Frage falsch verstanden, denn obwohl pbcopyund pbpastemit einer HTML-Datei arbeiten wird, ist das nur, weil es zufällig eine Textdatei ist.
Boehj
Nein, Sie haben die Frage richtig verstanden. Sie haben lediglich angenommen, dass diese Tools ordnungsgemäß funktionieren, was sie nicht tun. Sie sind fehlerhaft und sollen nicht einmal so funktionieren, obwohl Apple bei der Dokumentation wirklich schlechte Arbeit geleistet hat. Wenn Sie eingeben pbcopy -help, erhalten Sie eine nicht produktionswürdige NSLog()Zeile, die nur wiederholt wird 'pbcopy -help'. Es hilft, ein Programmierer zu sein, um dies zu verstehen, weshalb ich es für notwendig hielt, sich einzuschalten.
Itai Ferber
1
Ja, kein Problem. ;)
Itai Ferber
1
Jeder, der möchte, dass pbcopy Aufmerksamkeit erregt, kann sich ein kostenloses Entwicklerkonto zulegen und einige Fehler melden - bugreport.apple.com - es hilft zwar nicht, aber die Ingenieure können sich Zeit nehmen, an diesen Dingen zu arbeiten, wenn sich immer noch genügend Leute darum kümmern .
bmike
1
Kann das OP mit AppleScript auf der CLI erreichen, was es will?
7

Die folgende Funktion funktioniert nur mit einer einzelnen Datei und nicht mit mehreren Dateien. Es erfordert GNU, readlinkdas Sie installieren können, indem Sie ausführen brew install findutils.

copy(){ osascript -e{'on run{a}','set the clipboard to posix file a',end} "$(greadlink -f -- "$1")";}

Bearbeiten: Ich habe den tell app "Finder"Block entfernt.

Bearbeiten 2: Zurückgesetzt auf eine Version, die relative Pfade unterstützt.

Lri
quelle
2
Dieser funktioniert tatsächlich!
Bemmu
6

Durch Ausführen des pbcopy < filenameBefehls im Terminal wird der Inhalt der genannten Datei kopiert filename.

shinxg
quelle
3

Verwenden Sie den cpBefehl , um eine Datei an ein Ziel zu kopieren .

cp /path/to/file /path/to/destination

Siehe man cpfür weitere Informationen.

Graham
quelle
2
Dies ist keine Antwort auf die gestellte Frage, bei der die Zwischenablage als Zielspeicherort verwendet wird.
Kellyfj
2

Hier ist ein einfaches Shell / Bash-Skript. Fügen Sie es einfach in Ihre .bashrcDatei ein (oder ähnliches):

file-to-clipboard() {
    if [ -z "$1" ]; then
        echo "file path/name:"
        read FILE
    else
        FILE="$1"
    fi
    pbcopy < "$FILE"
}
blizzrdof77
quelle
0

Mit Unterstützung der relativen Datei:

clip_img() {
    osascript -e 'on run argv' \
        -e 'set currentDir to do shell script "pwd"' \
        -e 'set the clipboard to (read POSIX file (POSIX path of (currentDir as text & (first item of argv) )) as JPEG picture)' \
        -e 'end run' "/$1"
    # osascript -e 'clipboard info'
}

Führen Sie clip_img path-to-fileden Befehl aus, um das Bild in die Zwischenablage zu kopieren. Dies path-to-filekann relativ sein. Die Datei kann eine JPEG- oder PNG-Datei sein.

Schemata
quelle
-2

Sie können cat 'originfile'> 'destinationfile' in Unix-Umgebungen verwenden.

Kopieren der Ursprungsdatei Zieldatei unter Windows.

Allan Felipe Murara
quelle
2
Wie wird die Datei in die Zwischenablage verschoben?
grg