utilizzando il terminale per copiare un file negli appunti

139

Ho un file sul desktop, il nome del file è ded.html. Per copiare il file, faccio clic sul file e premo cmd + c.

Ora come dovrei fare la stessa cosa usando il terminale?

    
posta angry kiwi 05.06.2011 - 09:55
fonte

8 risposte

210

Se capisco bene la domanda, quello che cerchi è pbcopy e pbpaste .

Apri un terminale e fai:

$ cat ~/Desktop/ded.html | pbcopy

Ora quel file è negli appunti.

Per metterlo da un'altra parte, cioè incollarlo, fai:

$ pbpaste > ~/Documents/ded.html

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

    
risposta data 05.06.2011 - 12:33
fonte
16

La risposta di Lri è andando nella direzione giusta, ma ha un paio di difetti: non c'è bisogno di usare Finder ( the clipboard fa parte di StandardAdditions OSAX), e dando un run handler è un modo molto più affidabile per passare argomenti dalla riga di comando (dal 10.4). Fare entrambe queste modifiche semplifica enormemente la "fuga" che occorre fare per accedere al programma in una shell.

Ecco la mia versione (racchiusa in una funzione di shell - potresti inserire questo (ad es.) .bashrc per renderlo 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 messo negli Appunti con questo script può quindi essere incollato in 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 esempio 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, puoi omettere il percorso del file "script".

    
risposta data 08.06.2011 - 05:44
fonte
6

Non c'è modo di ottenere ciò che stai cercando di fare usando la riga di comando. Mentre Apple offre gli strumenti pbcopy e pbpaste per consentire la copia di base del testo, non puoi usare questi strumenti per copiare un file nel senso che stai cercando.

Senza entrare troppo nei dettagli tecnici, quando "copi" un file nel Finder usando C , in realtà non stai copiando il file stesso, basta fare un riferimento al file negli appunti e contrassegnarlo come riferimento di file. Quando un'applicazione riceve questo riferimento quando si incolla, ha la responsabilità di ordinare le cose, capire cosa si è incollato e, infine, lavorare con il file come meglio crede. In sostanza, quando copi un file nel Finder, salva il percorso del file in un certo modo su un determinato blocco, e quando lo incolli, riceve quel percorso di file e sa di creare un nuovo file usando il contenuto del file quello vecchio (copia un file negli appunti, cancellalo, prova ad incollarlo da qualche altra parte, e guarda cosa succede, per esempio).

In questo senso di copia e incolla, gli strumenti disponibili non sono sufficienti per fare ciò che ti serve. Come suggerito da boehj, puoi provare a copiare il contenuto del vecchio file in uno nuovo, ma questo funziona solo per i file di testo. Qualsiasi file binario che ottieni sarà corrotto (prova a farlo con un'immagine - diventa danneggiato).

La riga di comando tradizionale ti mancherà in questo modo, ma puoi dare un'occhiata se vuoi farlo in AppleScript, quindi richiamarlo tramite la riga di comando con osascript .

    
risposta data 05.06.2011 - 13:49
fonte
5

Modifica: questo script ora utilizza un gestore di esecuzione e non si basa su Finder. Ho anche aggiunto un trucco per farlo funzionare con percorsi relativi.

copy() {
    osascript - "$@" <<'END' 2> /dev/null
on run {a}
set the clipboard to POSIX file (POSIX path of ((POSIX file a) as alias))
end
END
}

Non conosco alcun modo per copiare più file però.

Quando un percorso relativo viene convertito in un alias, c'è un avviso come CFURLGetFSRef was passed this URL which has no scheme in 10.8. Può essere semplicemente ignorato, quindi lo script reindirizza STDERR.

    
risposta data 07.06.2011 - 14:46
fonte
2

Per copiare un file in una destinazione, usa il comando cp .

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

Visualizza man cp per ulteriori informazioni.

    
risposta data 05.06.2011 - 10:00
fonte
2

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

    
risposta data 12.04.2018 - 15:59
fonte
1

Ecco un semplice script Shell / Bash. Incollalo nel tuo file .bashrc (o simile):

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

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

copia file di destinazione file di destinazione su Windows.

    
risposta data 06.01.2018 - 22:06
fonte

Leggi altre domande sui tag