usando il terminale per copiare un file negli appunti


Risposte:


237

Se ho la comprensione del diritto domanda, che cosa siete dopo è pbcopye pbpaste.

Apri un terminale ed esegui:

$ cat ~/Desktop/ded.html | pbcopy

Ora quel file è negli appunti.

Per metterlo altrove, cioè per incollarlo, fai:

$ pbpaste > ~/Documents/ded.html

Ora dovresti avere una copia di ded.html in ~ / Documents.


3
Questo è ottimo per lavorare con file di testo, ma fallirà quando si tenta di eseguire l'attività con i binari. Prova questo con un'immagine per vedere cosa intendo.
Itai Ferber,

7
dopo aver digitato $ cat ~ / Desktop / ded.html | pbcopy Non riesco a usare cmd + v per incollare il file. Sebbene $ pbpaste> ~ / Documents / ded.html abbia fatto il lavoro.
kiwi arrabbiato,

Puoi anche visualizzare il contenuto del file negli Appunti OSX andando nel menu Finder Modifica> Mostra Appunti (testato su Yosemite).
Dannid,

Grazie, hai idea di come l'ho letto e lo passo al prossimo comando? ad es cat ~/.emulator_console_auth_token | auth <read_content>.
Domenico

Questo copia il contenuto del file, ma non il file stesso.
vy32

20

La risposta di Lri è orientata nella giusta direzione, ma presenta un paio di difetti: non è necessario utilizzare Finder ( the clipboardfa parte di StandardAdditions OSAX) e fornire un rungestore è un modo molto più affidabile per passare argomenti dalla riga di comando (dal 10.4). Apportare entrambe queste modifiche semplifica notevolmente la "fuga" che deve essere fatta per entrare nel programma in una shell.

Ecco la mia versione (racchiusa in una funzione shell: potresti metterla in (es.) Your .bashrcper renderla disponibile nelle tue shell):

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

Un file che è stato inserito negli Appunti con questo script può quindi essere incollato nel Finder per copiare il file in un'altra cartella.

osascript può anche essere usato come interprete hash-bang (dal 10.5). Metti questo in un file (ad es. file-to-clipboard)

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

Rendi il file eseguibile ( chmod +x /path/to/where/ever/you/put/file-to-clipboard). Quindi eseguilo in questo modo:

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

Se è memorizzato in una directory nel PERCORSO, è possibile omettere il percorso del file "script".


@Lri: Finder non comprende l'ovvio set the clipboard to {one,two}(anche se un altro programma AppleScript può estrarre correttamente l'elenco). I comandi degli Appunti di StandardAdditions possono essere limitati a singoli elementi.
Chris Johnsen,

1
Funzionerebbe per più file?
VitalyB

Nota: il percorso indicato deve essere un percorso assoluto affinché lo script funzioni.
Leone

8

Non è possibile ottenere ciò che si sta tentando di fare utilizzando la riga di comando. Mentre Apple offre gli strumenti pbcopye pbpasteper consentire la copia di base del testo, non puoi utilizzare questi strumenti per copiare un file nel senso che stai cercando.

Senza entrare in troppi dettagli tecnici, quando 'copi' un file nel Finder utilizzando C, non stai effettivamente copiando il file stesso, facendo semplicemente un riferimento al file negli Appunti e contrassegnandolo come riferimento al file. Quando un'applicazione riceve questo riferimento quando si incolla, ha la responsabilità di ordinare le cose, capire cosa hai incollato e, in definitiva, lavorare con il file come meglio crede. In sostanza, quando copi un file nel Finder, salva il percorso del file in un certo modo in un determinato appunti e, quando lo incolla, riceve quel percorso del file e sa di creare un nuovo file usando il contenuto del quello vecchio (copia un file negli appunti, eliminalo, prova a incollarlo da qualche altra parte e vedi cosa succede, per esempio).

In questo senso di copia e incolla, gli strumenti disponibili non sono sufficienti per fare ciò di cui hai bisogno. Come suggerito boehj, puoi provare a copiare il contenuto del vecchio file in uno nuovo, ma funzionerà bene solo per i file di testo. Tutti i file binari che otterrai saranno danneggiati (prova a farlo con un'immagine: si corrompe).

La riga di comando tradizionale non ti guiderà in questo modo, ma puoi dare un'occhiata se desideri farlo in AppleScript, quindi invocarlo tramite la riga di comando con osascript.


Hai ragione sulle immagini, ecc. Non ci ho pensato. Immagino di aver frainteso la domanda, perché sebbene pbcopye pbpastefunzionerà con un file .html, questo è solo perché sembra essere un file di testo.
Boehj,

No, hai capito correttamente la domanda, è solo che hai presupposto che questi strumenti funzionassero come dovrebbero, cosa che non fanno. Sono difettosi e non sono nemmeno pensati per funzionare in questo modo, anche se Apple ha svolto un lavoro davvero scadente sulla documentazione. Se si digita pbcopy -help, si ottiene una NSLog()riga non di produzione che si ripete 'pbcopy -help'. È utile essere un programmatore per capire questo, motivo per cui ho ritenuto necessario intervenire.
Itai Ferber,

1
Sì, nessun problema. ;)
Itai Ferber,

1
Chiunque desideri che pbcopy attiri un po 'di attenzione potrebbe ottenere un account sviluppatore gratuito e presentare alcuni bug - bugreport.apple.com - nessuna garanzia che possa essere d'aiuto, ma offre agli ingegneri una leva per ottenere il tempo di lavorare su queste cose se ci sono ancora abbastanza persone a cui interessa .
bmike

1
L'OP può ottenere ciò che desidera con AppleScript sulla CLI?

7

La funzione seguente funziona solo con un singolo file e non con più file. Richiede GNU readlinkche è possibile installare eseguendo brew install findutils.

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

Modifica: ho rimosso il tell app "Finder"blocco.

Modifica 2: ripristinato a una versione che supporta percorsi relativi.


2
Questo funziona davvero!
Bemmu

6

L'esecuzione del pbcopy < filenamecomando nel Terminale copia il contenuto del file denominato filename.


3

Per copiare un file in una destinazione, utilizzare il cpcomando

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

Vedi man cpper maggiori informazioni.


2
Questa non è una risposta alla domanda posta che fa riferimento agli Appunti come posizione di destinazione.
Kellyfj,

2

Ecco un semplice script Shell / Bash. Basta incollarlo nel tuo .bashrcfile (o simili):

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

0

Con il supporto del relativo file:

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'
}

eseguito clip_img path-to-fileper copiare l'immagine negli appunti e path-to-filepotrebbe essere relativo. Il file potrebbe essere jpeg o file png.


-2

Puoi usare cat 'originfile'> 'destinationfile' su ambienti unix;

copia il file di destinazione originfile su windows.


2
In che modo questo inserisce il file negli Appunti?
grg
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.