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 argsset 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:
@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.
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.
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.
Respostas:
Se estou entendendo a pergunta corretamente, o que você procura é
pbcopy
epbpaste
.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.
fonte
cat ~/.emulator_console_auth_token | auth <read_content>
?A resposta de Lri está indo na direção certa, mas tem algumas falhas: não há necessidade de usar o Finder (
the clipboard
faz parte do StandardAdditions OSAX), e fornecer umrun
manipulador é 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
.bashrc
para disponibilizá-la em seus shells):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
)Torne o arquivo executável (
chmod +x /path/to/where/ever/you/put/file-to-clipboard
). Em seguida, execute-o assim:Se ele estiver armazenado em um diretório no PATH, você poderá omitir o caminho para o arquivo "script".
fonte
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.Não há como alcançar o que você está tentando fazer usando a linha de comando. Enquanto a Apple oferece as ferramentas
pbcopy
epbpaste
para 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
.fonte
pbcopy
epbpaste
funcione com um arquivo .html, é apenas porque é apenas um arquivo de texto.pbcopy -help
, terá uma linha que não vale a penaNSLog()
repetir'pbcopy -help'
. Ela ajuda a ser um programador para entender isso, e é por isso que eu senti a necessidade de dialogar.A função abaixo funciona apenas com um único arquivo e não com vários arquivos. Requer o GNU
readlink
que você pode instalar executandobrew install findutils
.Edit: Eu removi o
tell app "Finder"
bloco.Editar 2: revertido para uma versão que suporta caminhos relativos.
fonte
O
pbcopy < filename
comando de execução no Terminal copia o conteúdo do arquivo nomeadofilename
.fonte
Para copiar um arquivo para um destino, use o
cp
comandoVeja
man cp
para mais informações.fonte
Aqui está um script Shell / Bash simples. Basta colá-lo em seu
.bashrc
arquivo (ou algo semelhante):fonte
Com suporte de arquivo relativo:
execute
clip_img path-to-file
para copiar a imagem para a área de transferência epath-to-file
pode ser relativo. O arquivo pode ser arquivos JPEG ou PNG.fonte
Você pode usar o gato 'originfile'> 'destinationfile' em ambientes unix;
copiar arquivo de origem arquivo de destino no Windows.
fonte