usando o terminal para copiar um arquivo para a área de transferência

159

Eu tenho um arquivo na área de trabalho, o nome do arquivo é ded.html. Para copiar o arquivo, clico no arquivo e pressione cmd + c.

Agora, como eu faria a mesma coisa usando o terminal?

kiwi com raiva
fonte
2
Você quer dizer copiar o arquivo ou copiar o conteúdo do arquivo para que o conteúdo possa ser colado?
precisa saber é o seguinte
Consulte também apple.stackexchange.com/q/362245/10713
laktak

Respostas:

237

Se estou entendendo a pergunta corretamente, o que você procura é pbcopye pbpaste.

Abra um terminal e faça:

$ cat ~/Desktop/ded.html | pbcopy

Agora esse arquivo está na área de transferência.

Para colocá-lo em outro lugar, ou seja, para colá-lo, faça:

$ pbpaste > ~/Documents/ded.html

Agora você deve ter uma cópia do ded.html em ~ / Documents.

boehj
fonte
3
Isso é ótimo para trabalhar com arquivos de texto, mas falhará quando você tentar executar a tarefa com binários. Tente isso com uma imagem para ver o que quero dizer.
Itai Ferber
7
depois de digitar $ cat ~ / Desktop / ded.html | pbcopy Não consigo usar o cmd + v para colar o arquivo. Embora o $ pbpaste> ~ / Documents / ded.html tenha feito o trabalho.
angry kiwi
Você também pode visualizar o conteúdo do arquivo na área de transferência do OSX, acessando o menu Finder Editar> Mostrar área de transferência (testado em Yosemite).
Dannid
Obrigado, alguma idéia de como eu li e passei para o próximo comando? por exemplo cat ~/.emulator_console_auth_token | auth <read_content>?
Dominic
Isso copia o conteúdo do arquivo, mas não o próprio arquivo.
vy32 8/03
20

A resposta de Lri está indo na direção certa, mas tem algumas falhas: não há necessidade de usar o Finder ( the clipboardfaz parte do StandardAdditions OSAX), e fornecer um runmanipulador é uma maneira muito mais confiável de passar argumentos da linha de comando (desde 10.4). Fazer essas duas alterações simplifica bastante o "escape" que precisa ser feito para entrar no programa em um shell.

Aqui está a minha versão (envolvida em uma função shell - você pode colocá-la em (por exemplo) sua .bashrcpara disponibilizá-la em seus shells):

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

Um arquivo que foi colocado na área de transferência com esse script pode ser colado no Finder para copiar o arquivo para outra pasta.

o osascript também pode ser usado como um intérprete de hash-bang (desde 10.5). Coloque isso em um arquivo (por exemplo file-to-clipboard)

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

Torne o arquivo executável ( chmod +x /path/to/where/ever/you/put/file-to-clipboard). Em seguida, execute-o assim:

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

Se ele estiver armazenado em um diretório no PATH, você poderá omitir o caminho para o arquivo "script".

Chris Johnsen
fonte
@Lri: O Finder não entende o óbvio set the clipboard to {one,two}(embora outro programa AppleScript possa extrair a lista com sucesso). Os comandos da área de transferência do StandardAdditions podem estar limitados a itens únicos.
Chris Johnsen
11
Funcionaria para vários arquivos?
precisa saber é o seguinte
Nota: O caminho fornecido deve ser um caminho absoluto para o script funcionar.
Leo
8

Não há como alcançar o que você está tentando fazer usando a linha de comando. Enquanto a Apple oferece as ferramentas pbcopye pbpastepara permitir a cópia básica de texto, você não pode usá-las para copiar um arquivo no sentido que procura.

Sem entrar em muitos detalhes técnicos, quando você 'copia' um arquivo no Finder usando C, na verdade você não está copiando o arquivo, apenas fazendo uma referência ao arquivo na área de transferência e marcando-o como uma referência de arquivo. Quando um aplicativo recebe essa referência quando você cola, ele tem a responsabilidade de organizar as coisas, descobrir o que você colou e, finalmente, trabalhar com o arquivo como achar melhor. Essencialmente, quando você copia um arquivo no Finder, ele salva o caminho do arquivo de uma certa maneira para uma determinada área de transferência e, quando você cola, recebe esse caminho e sabe criar um novo arquivo usando o conteúdo do antigo (copie um arquivo para a área de transferência, exclua-o, tente colá-lo em outro lugar e veja o que acontece, por exemplo).

Nesse sentido de copiar e colar, as ferramentas disponíveis não são suficientes para fazer o que você precisa. Como boehj sugeriu, você pode tentar copiar o conteúdo do arquivo antigo para um novo, mas isso só funcionará bem para arquivos de texto. Todos os arquivos binários que você obtiver serão corrompidos (tente fazer isso com uma imagem - ela ficará corrompida).

A linha de comando tradicional falhará com você dessa maneira, mas você pode dar uma olhada se quiser fazer isso no AppleScript e, em seguida, chamar isso através da linha de comando com osascript.

Itai Ferber
fonte
Você está certo sobre imagens, etc. Eu não pensei nisso. Acho que não entendi bem a pergunta, porque, embora pbcopye pbpastefuncione com um arquivo .html, é apenas porque é apenas um arquivo de texto.
boehj
Não, você entendeu a pergunta corretamente, mas assumiu que essas ferramentas funcionavam como deveriam, o que não acontece. Eles são de buggy e nem devem funcionar dessa maneira, embora a Apple tenha feito um trabalho muito ruim na documentação. Se você digitar pbcopy -help, terá uma linha que não vale a pena NSLog()repetir 'pbcopy -help'. Ela ajuda a ser um programador para entender isso, e é por isso que eu senti a necessidade de dialogar.
Itai Ferber
11
Sim, não há problema. ;)
Itai Ferber
11
Qualquer pessoa que queira que o pbcopy obtenha alguma atenção pode obter uma conta de desenvolvedor gratuita e registrar alguns bugs - bugreport.apple.com - não há garantia de que isso ajudará, mas oferece aos engenheiros a oportunidade de ter tempo para trabalhar nessas coisas se pessoas suficientes ainda se importam .
bmike
11
O OP pode alcançar o que deseja com AppleScript na CLI?
7

A função abaixo funciona apenas com um único arquivo e não com vários arquivos. Requer o GNU readlinkque você pode instalar executando brew install findutils.

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

Edit: Eu removi o tell app "Finder"bloco.

Editar 2: revertido para uma versão que suporta caminhos relativos.

Lri
fonte
2
Este realmente funciona!
Bemmu 03/03
6

O pbcopy < filenamecomando de execução no Terminal copia o conteúdo do arquivo nomeado filename.

shinxg
fonte
3

Para copiar um arquivo para um destino, use o cpcomando

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

Veja man cppara mais informações.

Graham
fonte
2
Esta não é uma resposta à pergunta que faz referência à área de transferência como o local de destino.
26516 kellyfj
2

Aqui está um script Shell / Bash simples. Basta colá-lo em seu .bashrcarquivo (ou algo semelhante):

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

Com suporte de arquivo relativo:

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

execute clip_img path-to-filepara copiar a imagem para a área de transferência e path-to-filepode ser relativo. O arquivo pode ser arquivos JPEG ou PNG.

esquemas
fonte
-2

Você pode usar o gato 'originfile'> 'destinationfile' em ambientes unix;

copiar arquivo de origem arquivo de destino no Windows.

Allan Felipe Murara
fonte
2
Como isso coloca o arquivo na área de transferência?
grg