Um utilitário de copiar e colar da área de transferência da linha de comando?


127

No Windows, usei os utilitários de copiar e colar da área de transferência da linha de comando ...

  • pclip.exe e gclip.exe

Essas eram as portas UnixUtils para Windows (mas elas manipulavam apenas texto sem formatação). Havia alguns outros utilitários nativos do Windows que podiam escrever / extrair qualquer formato.

Procurei algo semelhante no Synaptic Package Manager, mas não consigo encontrar nada.

Existe algo que eu perdi? ... ou talvez isso esteja disponível no script Bash?

O tipo de utilitário que eu gostaria será capaz de ler / gravar via std-in / std-out ou file-in / file-out e manipular os formatos Unicode, Rich Text Format, picture etc. da área de transferência ...

NB: Não estou atrás de um gerente de área de transferência.


Veja pergunta relacionada a partir unix.SE: unix.stackexchange.com/questions/30093/...
landroni


vim[enter]"+P : 3 (execute o vim e, a partir do " registro - isto é, área de transferência do sistema - cole o texto) . Então você tem (um) dos melhores editores de texto na ponta dos dedos, para que possa :w filename. Além disso, eu sempre corro o vim no tmux, o que significa que, se precisar copiar um pequeno texto para o terminal, basta selecionar (com vou Vpara a seleção de linha) e depois "+y(que puxa ou copia para a área de transferência), então faço uma nova painel tmux e pode <ctrl> + <shift> + v para colar. Além disso, usarei ocasionalmente xsel -b > filenamese precisar gravar a área de transferência em um arquivo. Cheers ^ u ^
dylnmc

Respostas:


131

Estou usando o xsel Instale o xsel , mas apenas o uso com texto sem formatação e texto unicode.


xselpode copiar e colar em três "pranchetas" diferentes. Por padrão, ele usa a seleção primária do Sistema X Window , que é basicamente o que está atualmente na seleção. O sistema X Window também possui uma seleção secundária (que não é muito usada) e uma seleção da área de transferência . Você provavelmente está procurando a seleção da área de transferência , já que é isso que o ambiente da área de trabalho (por exemplo, Gnome, KDE, XFCE) usa para a área de transferência. Para usar isso com o xsel:

xsel --clipboard < new-clipboard-contents.txt
xsel --clipboard > current-clipboard-contents.txt

11
Adi ... xsel parece (?) Ser apenas baseado em texto (como você mencionou), por isso vou procurar um utilitário mais abrangente ... No entanto, foi muito interessante para mim ler sua documentação de informações ... Eu sabia que clicar no meio do mouse (no Terminal) colaria o texto atualmente selecionado na linha de comando, mas não sabia que esse recurso se aplica à maioria dos aplicativos X ... A seleção de texto mais recente pode ser colado através de um clique do meio (mas alguns aplicativos parecem substituí-lo) .. Duas pranchetas! .. Muito útil ... .Eu preciso ler mais sobre o terceiro buffer de seleção X.
precisa saber é o seguinte

O xsel funciona com texto Unicode. Você pode ler mais sobre a área de transferência do X nas páginas wiki do freedesktop: freedesktop.org/wiki/Specifications/ClipboardsWiki .
Adi Roiban

Eu tenho que entender essa nova informação .. 3 pranchetas! PRIMARY, SECUNDARY, CLIPBOARD ... Isso é muito diferente do que estou acostumado no Windows ... O terceiro "CLIPBOARD" parece ser o mesmo que uma área de transferência do Windows / Mac ... mas é ridiculamente tarde aqui .. Eu vou voltar a isso amanhã ... (Inersting, mas muito de ler agora ..)
Peter.O

Obrigado ... xselfaz o trabalho (para texto) ... Algo pode aparecer para outros formatos.
precisa saber é o seguinte

6
xsel -bé a abreviação de xsel --clipboard.
Andrei Duma

85

O xclip Instale o xclip pode ser uma de suas escolhas.

cat samples.sh | xclip -sel clip

você também pode configurá-lo no arquivo .bashrc usando o alias.

alias clipboard='xclip -sel clip'

A chave para colar dados binários em um arquivo xclipé informar quais tipos de mídia você possui na área de transferência. Para PNG, você pode:

xclip -selection clipboard -t image/png -o > "`date '+%Y-%m-%d_%T'`.png"

Então agora ~/Dropbox/.mybashrc;) você pode adicionar um apelido (clipboard2photo) para colar facilmente no arquivo de imagem (talvez um dia o tenhamos no Nautilus ).


Isso parece bom, mas eu ainda não tive a chance de investigá-lo, ainda assim ... eu farei isso o mais rápido possível ... #
314 Peter.O.

O xclip também lida apenas com seleções de texto.
Steve Beattie

2
Além disso, o comando pode ser tão curto quantoxclip -se c
Jeromy Anglim 5/11/11

11
Eu não entendo por que isso não está na página do homem
Sergiy Kolodyazhnyy

11
Eu recebo este ao tentar colar imagens de erro para o arquivo: imagem target / png não disponível
Emilio Nicolás

12

Parcellite

Eu usei o parcellite por muitos anos como gerente da área de transferência. Ele é executado na área de notificação e oferece muitas opções para gerenciar a seleção primária e a área de transferência padrão do freedesktop.org.

Ícone de bandeja

Tem sido minha resposta para gerenciar itens da área de transferência.

Preferências


Parece um bom aplicativo de painel .. As "Ações" são úteis ... mas infelizmente não é o tipo de ferramenta que estou procurando .. Reescrevi minha pergunta para incluir informações mais específicas ... Talvez a coisa exata que eu busco seja um script Python obscuro ou algo parecido ... Havia alguns utilitários nativos apenas para Windows muito bons disponíveis, então eu acho que um equivalente estaria flutuando em algum lugar do Ubuntu / mundo Linux ...
Peter.O

Para sua informação, o Parcellite possui um recurso interessante - histórico de texto copiado. Para ativar a colagem automática a partir da caixa de diálogo do histórico, você deveinstall xdotool
Noam Manos

10

Recentemente, deparei com as ferramentas xclip-copyfile, xclip-cutfile, e xclip-pastefile(pacote xclip). Essas ferramentas permitem copiar / recortar / colar arquivos inteiros via linha de comando.

Você pode ver a página de manual deles aqui.


10

O clipit ( http://clipit.rspwn.com/ ) é um gerenciador de área de transferência para o gtk que permite canalizar texto a partir da linha de comando:

ls | clipit;

Edit: Atualmente, não há nada no site oficial do ClipIt, mas você pode obtê-lo no GitHub


Estou usando o ClipIt por outros motivos e não sabia que era capaz de obter dados do terminal. Muito obrigado por essa informação.
Juraj.Lorinc

3

Você pode usar o CopyQ para isso. A partir do site:

Gerenciador de área de transferência com recursos avançados

  • CopyQ é gerenciador de prancheta com histórico pesquisável e editável.
  • Suporta Linux e Windows.
  • Suporte experimental para OS X 10.9+.
  • Armazene texto, HTML, imagens e qualquer outro formato personalizado.
  • Interface avançada de linha de comando e scripts.

Para copiar um arquivo de texto:

copyq action "cat /tmp/file.txt" "" && copyq select 0

Para copiar uma imagem (você precisa indicar o tipo MIME):

copyq write image/png - < file.png && copyq select 0

Para copiar um arquivo de dados (você precisa indicar o tipo MIME):

copyq write application/pdf - < file.pdf && copyq select 0

Verifique o wiki para mais documentação e exemplos de uso .

Você pode instalá-lo através do PPA ppa: noobslab / Indicators ou baixando manualmente os .debarquivos pré- empacotados do estábulo mais recente na seção Downloads do projeto .


11
O ppa não está atualizado, pelo menos para o Ubuntu 16.04, é melhor baixá-lo diretamente do site GitHub da CopyQ .
Nicolai

3

Se você deseja apenas copiar algum texto para a área de transferência:

echo -n "some-text" | xclip -selection clipboard


2

Pastie

Um novo gerenciador de área de transferência com suporte ao Indicator Applet foi lançado recentemente (embora ainda não esteja no arquivo morto). Além de rastrear o histórico da área de transferência de texto, ele também captura e mantém entradas da área de transferência de dados (arquivos, pastas, etc.), que podem ser úteis se você manipular muito os arquivos por meio de um ambiente da GUI / área de transferência.

texto alternativo

Você pode adicionar o seguinte PPA :ppa:hel-sheep/pastie


Obrigado pela sugestão Marco, mas não preciso de um gerente de área de transferência. Ocasionalmente, colo algum texto temporário em um arquivo de texto, mas na verdade acho que um "gerenciador de histórico" torna as coisas mais lentas (mas sou apenas eu) .. Estou realmente procurando por uma ferramenta de linha de comando que pode extrair / armazenar seletivamente um formato específico de / para o clipboad .. Estou assumindo que a área de transferência do Ubuntu é semelhante à do Windows (eu ficaria surpreso se fosse significativamente diferente, porque os requisitos dos usuários são os mesmos em qualquer plataforma) ... tenho certeza de que alguém achará sua sugestão útil.
precisa saber é o seguinte


1

Que tal as configurações do daemon GPaste , um applet daemon de gerenciamento da área de transferência com a interface DBus:

  • GPaste é um conjunto de gerenciamento de área de transferência para o GNOME escrito em Vala
  • A aparência das configurações do GPaste foi atualizada para se ajustar melhor ao recente GNOME
  • Daemon agora totalmente uniforme (sem mais pesquisas, menos consumo de energia)
  • O GPasteClipboard agora possui um sinal de "mudança de proprietário" semelhante ao sinal de GtkClipboard
  • Nova configuração para definir a quantidade máxima de memória usada pelos dados no histórico
  • O modo FIFO foi descartado (sem design)
  • Limpeza e modernização de código
  • g_paste_history_add agora está transferido completo
  • g_paste_keybinder_add_keybinding agora está transferido completo

Instalação:

Para instalá-lo no Ubuntu 13.10 , 13.04 , 12.10 ou 12.04 , use os comandos abaixo:

sudo add-apt-repository ppa:webupd8team/gnome3
sudo apt-get update
sudo apt-get install gnome-shell-extensions-gpaste

Ou instale gpasteatravés synaptic package manager(e também gnome-shell-extensions-gpastese você usar o Gnome-Shell).

Outra opção é a instalação software-center.

insira a descrição da imagem aqui


1

Estou tentando desenvolver uma solução melhor que não seja um gerenciador de área de transferência, encontrada em https://github.com/baitisj/copypasta . Ainda não lida com RTF e HTML corretamente, e imagens grandes apresentam problemas, mas fique à vontade para bifurcar e enviar patches.


1

Para o formato RTF, uso este procedimento: Copio o texto na área de transferência no aplicativo. Se não tiver certeza se é rtf ou o quê, use este comando para verificar:

xclip -selection clipboard -o -t TARGETS

Quando ele imprime algo como isto:

ALVOS

text / rtf

texto / richtext

Portanto, não resisto a exclamar em voz alta: "Puxa, isso é genial! Deus abençoe o linux!" Depois da oração, a coisa mais óbvia a seguir:

xclip  -selection clipboard -o -t text/rtf > mypreciousRTFcontent.rtf

Depois, processo tudo no libreoffice e envio a todos os meus amigos como spam.

:-)


0

Ei, gnômeros, é isso que você ganha por usar o lixo do CORBA.
Não há nada melhor para o seu software do que usar ferramentas não instaladas por padrão.

Se você tivesse usado um ambiente de área de trabalho adequado, como o KDE-plasma, você não teria esse problema, porque poderia usar o dbus, de qualquer software que desejar, por exemplo, o console:

qdbus org.kde.klipper /klipper setClipboardContents "NiHao"
qdbus org.kde.klipper /klipper getClipboardContents

Pessoalmente, eu realmente me conecto ao dbus diretamente com C #, o que significa que não preciso do qdbus.
Isso provavelmente não serve para você, já que você não tem o klipper, mas pensei em mencioná-lo de qualquer maneira, apenas para incomodá-lo com o modo como é feito corretamente.

PS: Não copie esse código C #, o Task.Result pode entrar em conflito.

private static async System.Threading.Tasks.Task<string> GetClipboardContentsAsync()
{
    string clipboardContents = null;

    Tmds.DBus.ObjectPath objectPath = new Tmds.DBus.ObjectPath("/klipper");
    string service = "org.kde.klipper";

    using (Tmds.DBus.Connection connection = new Tmds.DBus.Connection(Tmds.DBus.Address.Session))
    {
        await connection.ConnectAsync();

        IKlipper klipper = connection.CreateProxy<IKlipper>(service, objectPath);

        clipboardContents = await klipper.getClipboardContentsAsync();
    } // End Using connection 

    return clipboardContents;
}


private static string GetClipboardContents()
{
    return GetClipboardContentsAsync().Result;
}


private static async System.Threading.Tasks.Task SetClipboardContentsAsync(string text)
{
    Tmds.DBus.ObjectPath objectPath = new Tmds.DBus.ObjectPath("/klipper");
    string service = "org.kde.klipper";

    using (Tmds.DBus.Connection connection = new Tmds.DBus.Connection(Tmds.DBus.Address.Session))
    {
        await connection.ConnectAsync();

        IKlipper klipper = connection.CreateProxy<IKlipper>(service, objectPath);

        await klipper.setClipboardContentsAsync(text);
    } // End using connection 

}


private static void SetClipboardContents(string text)
{
    SetClipboardContentsAsync(text).Wait();
}

-1

Sim existe. Tente tmuxqual é mais avançado que screen. Para instalar o tmux, digite isto no terminal:

sudo apt-get install tmux

Também tente gpm. Os comandos gpme tmuxpodem ser uma boa combinação ...


2
Tela é um emulador de terminal múltiplo, não um gerenciador de área de transferência.
Marco Ceppi

Parece que screen e tmux funcionam apenas no nível do terminal (não consigo encontrar nenhuma referência à "área de transferência" em nenhuma documentação de informações ) ... O que estou procurando é um utilitário de copiar e colar em toda a área de transferência ... provavelmente não deveria ter usado o terminal como uma tag ... O tipo de utilitário que desejo será capaz de ler / gravar via std-in / std-out ou file-in / file-out e manipular Unicode / Formatos de área de transferência Rich-text / Picture / etc ...
Peter.O

Acabei de encontrar uma referência no stackoverflow ... gpmé para uma "área de transferência" de terminal não-X e GNU screenpossui sua própria "área de transferência" também ... Agora entendo por que você as mencionou ... Essas são ótimas informações e isso me levou a uma compreensão mais profunda do que acontece nos bastidores ... Por enquanto, continuarei com o "sistema de seleções" básico do Xterm (clipboad). A "área de transferência" do Linux parece ser tão diferente do Windows, que o que eu estava procurando pode ser feito de uma maneira muito diferente aqui .. +1 :)
Peter.O
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.