¿Una utilidad para copiar y pegar en el portapapeles de la línea de comandos?


127

En Windows utilicé las utilidades de copiar y pegar del portapapeles de la línea de comandos ...

  • pclip.exe y gclip.exe

Estos eran puertos UnixUtils para Windows (pero solo manejaban texto sin formato). Había un par de otras utilidades nativas de Windows que podían escribir / extraer cualquier formato.

He buscado algo similar en Synaptic Package Manager, pero no puedo encontrar nada.

¿Hay algo allí que me haya perdido? ... o tal vez esto está disponible en las secuencias de comandos Bash?

El tipo de utilidad que me gustaría podrá leer / escribir a través de std-in / std-out o file-in / file-out, y manejar formatos de portapapeles Unicode, Rich Text Format, imagen, etc.

NB: no busco un administrador de portapapeles.


Consulte la pregunta relacionada de unix.SE: unix.stackexchange.com/questions/30093/…
landroni


vim[enter]"+P : 3 (ejecute vim y luego desde el " registro, es decir, el portapapeles del sistema, pegue el texto) . Luego tiene (uno de) los mejores editores de texto al alcance de su mano, para que pueda :w filename. Además, siempre ejecuto vim en tmux, lo que significa que si necesito copiar un pequeño texto en el terminal, simplemente selecciono (con vo Vpara la selección de línea) y luego "+y(que tira o copia al portapapeles), entonces hago un nuevo tmux pane y puede <ctrl> + <shift> + v para pegar. Además, ocasionalmente lo usaré xsel -b > filenamesi necesito escribir el portapapeles en un archivo. Saludos ^ u ^
dylnmc

Respuestas:


131

Estoy usando xsel Instalar xsel , pero solo lo estoy usando con texto plano y texto unicode.


xselpuede copiar y pegar en tres "portapapeles" diferentes. Por defecto, utiliza la selección primaria del sistema X Window , que es básicamente lo que está actualmente en la selección. El sistema X Window también tiene una selección secundaria (que no se usa mucho) y una selección de portapapeles . Probablemente esté buscando la selección del portapapeles , ya que eso es lo que el entorno de escritorio (por ejemplo, Gnome, KDE, XFCE) usa para su portapapeles. Para usar eso con xsel:

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

1
Adi ... xsel parece (?) Estar solo basado en texto (como usted mencionó), así que buscaré una utilidad más completa ... Sin embargo, ha sido muy interesante para mí leer su documentación de información ... Sabía que hacer clic con el botón central del mouse (en la Terminal) pegaría el texto seleccionado actualmente en la línea de comandos, pero no me di cuenta de que esta característica se aplica a la mayoría de las aplicaciones X ... La selección de texto más reciente puede ser pegado a través de un clic del medio (pero algunas aplicaciones parecen anularlo) ... ¡Dos portapapeles! ... Muy útil ... Debo leer más sobre el tercer búfer de selección X.
Peter.O

xsel funciona con texto Unicode. Puede leer más sobre los portapapeles X en las páginas wiki de freedesktop : freedesktop.org/wiki/Specifications/ClipboardsWiki .
Adi Roiban el

Tengo que entender esta nueva información ... ¡3 portapapeles! PRIMARIO, SECUNDARIO, CLIPBOARD ... Esto es muy diferente a lo que estoy acostumbrado en Windows ... El tercer "CLIPBOARD" parece ser el mismo que un portapapeles de Windows / Mac ... pero aquí es ridículamente tarde .. Volveré a esto mañana ... (Inersting, pero demasiado para leer ahora ...)
Peter.O

Gracias ... xselhace el trabajo (para texto) ... Algo podría aparecer para otros formatos.
Peter.O

66
xsel -bes la abreviatura de xsel --clipboard.
Andrei Duma

85

xclip Instalar xclip puede ser una de tus opciones.

cat samples.sh | xclip -sel clip

También puede configurarlo en el archivo .bashrc usando un alias.

alias clipboard='xclip -sel clip'

La clave para pegar datos binarios en un archivo xclipes indicar qué tipos de medios tiene en el portapapeles. Para PNG puedes:

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

Así que ahora ~/Dropbox/.mybashrc;) puede agregar un alias (clipboard2photo) para pegarlo fácilmente en el archivo de imagen (tal vez algún día lo tengamos en Nautilus ).


Esto se ve bien, pero simplemente no he tenido la oportunidad de investigarlo, todavía ... Lo haré lo antes posible ...
Peter.O

xclip también solo maneja selecciones de texto.
Steve Beattie

2
Además, el comando puede ser tan breve comoxclip -se c
Jeromy Anglim

1
No entiendo por qué esto no está en la página del manual
Sergiy Kolodyazhnyy

1
Me sale esto cuando intento pegar imágenes en el archivo Error: imagen de destino / png no disponible
Emilio Nicolás

12

Parcelita

He usado parcellite durante muchos años como administrador de portapapeles. Se ejecuta en el Área de notificación y ofrece muchas opciones para administrar tanto la Selección primaria como el Portapapeles estándar de freedesktop.org.

Icono de bandeja

Ha sido mi respuesta para administrar los elementos del portapapeles.

Preferencias


Parece una buena aplicación de panel. Las "Acciones" son útiles ... pero desafortunadamente no es el tipo de herramienta que estoy buscando. Reformulé mi pregunta para incluir información más específica ... Tal vez lo que busco es un oscuro script de Python, o similar ... Había un par de muy buenas utilidades nativas solo para Windows disponibles, así que creo que un equivalente estaría flotando en algún lugar de Ubuntu / Linux world ...
Peter.O

Para su información, Parcellite tiene una característica interesante: historial de texto copiado. Para activar el pegado automático desde el cuadro de diálogo del historial, también debeinstall xdotool
Noam Manos

10

Recientemente me encontré con las herramientas xclip-copyfile, xclip-cutfiley xclip-pastefile(paquete xclip). Estas herramientas le permiten copiar / cortar / pegar archivos completos a través de la línea de comando.

Puedes ver su página de manual aquí.


10

clipit ( http://clipit.rspwn.com/ ) es un administrador de portapapeles para gtk que permite canalizar texto desde la línea de comandos:

ls | clipit;

Editar: Actualmente, no hay nada en el sitio web oficial de ClipIt, pero puede obtenerlo de GitHub


Estoy usando ClipIt por otras razones y no sabía que era capaz de obtener datos del terminal. Muchas gracias por esa información.
Juraj.Lorinc

3

Puede usar CopyQ para esto. Desde el sitio web:

Administrador de portapapeles con funciones avanzadas

  • CopyQ es un administrador de portapapeles con historial de búsqueda y editable.
  • Soporta Linux y Windows.
  • Soporte experimental para OS X 10.9+.
  • Almacene texto, HTML, imágenes y cualquier otro formato personalizado.
  • Interfaz avanzada de línea de comandos y secuencias de comandos.

Para copiar un archivo de texto:

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

Para copiar una imagen (debe indicar el tipo MIME):

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

Para copiar un archivo de datos (debe indicar el tipo MIME):

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

Consulte su wiki para obtener más documentación y ejemplos de uso .

Puede instalarlo a través de ppa: noobslab / flags PPA o descargando manualmente los .debarchivos preempaquetados de la última versión estable de la sección Descargas del proyecto .


1
El ppa no está actualizado, al menos para Ubuntu 16.04, es mejor descargarlo directamente del sitio GitHub de los lanzamientos de CopyQ .
Nicolai

3

Si solo quieres copiar algo de texto en el portapapeles:

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


2

Pastie

Recientemente se lanzó un nuevo administrador de portapapeles con soporte de Indicator Applet (aunque todavía no está en el archivo). Además de rastrear el historial del portapapeles de texto, también capturará y conservará las entradas del portapapeles de datos (archivos, carpetas, etc.) que pueden ser útiles si manipula mucho los archivos a través de un entorno GUI / Portapapeles.

texto alternativo

Puede agregar el siguiente PPA :ppa:hel-sheep/pastie


Gracias por la sugerencia Marco, pero no necesito un administrador de portapapeles. De vez en cuando pegaré un texto temporal en un archivo de texto, pero en realidad encuentro que un "administrador de historial" ralentiza las cosas (pero eso es solo yo). Realmente busco una herramienta de línea de comandos que pueda extraer / almacenar selectivamente un formato específico desde / hacia el portapapeles ... Supongo que el portapapeles de Ubuntu es similar al de Windows (me sorprendería si fuera significativamente diferente, porque los requisitos de los usuarios son los mismos en cualquier plataforma) ... I ' Estoy seguro de que alguien encontrará útil su sugerencia.
Peter.O


1

¿Qué hay de la configuración de GPaste daemon , un applet de administración de portapapeles con interfaz DBus:

  • GPaste es una suite de gestión de portapapeles para GNOME escrita en Vala
  • La apariencia de la configuración de GPaste se ha actualizado para adaptarse mejor a GNOME reciente
  • Daemon ahora completamente uniforme (no más encuestas, menos consumo de energía)
  • GPasteClipboard ahora tiene una señal de "cambio de propietario" similar a la de GtkClipboard
  • Nueva configuración para establecer la cantidad máxima de memoria utilizada por los datos en el historial
  • El modo FIFO se ha eliminado (falta diseño)
  • Código de limpieza y modernización
  • g_paste_history_add ahora se transfiere por completo
  • g_paste_keybinder_add_keybinding ahora se transfiere por completo

Instalación:

Para instalarlo en Ubuntu 13.10 , 13.04 , 12.10 o 12.04 , use los siguientes comandos:

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

O instalar a gpastetravés de synaptic package manager(y también gnome-shell-extensions-gpastesi usa Gnome-Shell).

Otra opción es la instalación a través software-center.

ingrese la descripción de la imagen aquí


1

Estoy tratando de desarrollar una mejor solución que no sea un administrador de portapapeles, que se encuentra en https://github.com/baitisj/copypasta . Todavía no maneja RTF y HTML correctamente, y las imágenes grandes plantean problemas, pero no dude en bifurcar y enviar parches.


1

Para el formato RTF utilizo este procedimiento: copio texto en el portapapeles en la aplicación. Si no estoy seguro de si es rtf o qué, uso este comando para verificar:

xclip -selection clipboard -o -t TARGETS

Cuando imprime algo como esto:

OBJETIVOS

text / rtf

texto / texto enriquecido

Así que no puedo resistirme a exclamar en voz alta: "¡Dios, eso es genial! ¡Dios bendiga a Linux!" Después de esa oración, sigue algo obvio:

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

Luego lo proceso todo en libreoffice y lo envío a todos mis amigos como spam.

:-)


0

Gnómeros, eso es lo que obtienes por usar CORBA-crap.
No hay nada mejor para el software yar que usar herramientas no instaladas por defecto.

Si hubiera utilizado un entorno de escritorio adecuado, como KDE-plasma, no tendría ese problema, ya que podría usar dbus, desde cualquier software que desee, por ejemplo, la consola:

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

Personalmente, en realidad me conecto a dbus directamente con C #, lo que significa que no necesito qdbus.
Probablemente no te sirva de nada, ya que no tienes klipper, pero pensé en mencionarlo de todos modos, solo para molestarte por cómo se hace correctamente.

PD: No copie ese código C #, Task.Result podría llegar a un punto muerto.

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

Sí hay. Prueba tmuxcuál es más avanzado que screen. Para instalar tmux, escriba esto en la terminal:

sudo apt-get install tmux

Intenta también gpm. Los comandos gpmy tmuxpodrían ser una buena combinación ...


2
Screen es un emulador de terminales múltiples, no un administrador de portapapeles.
Marco Ceppi

Parece que screen y tmux solo funcionan a nivel de terminal (no puedo encontrar ninguna referencia al "portapapeles" en ninguna de su documentación de información ) ... Lo que estoy buscando es una utilidad para copiar y pegar portapapeles en todo el sistema ... Probablemente no debería haber utilizado el terminal como una etiqueta ... El tipo de utilidad que deseo podrá leer / escribir a través de std-in / std-out o file-in / file-out, y manejar Unicode / Formatos de portapapeles de texto enriquecido / imagen / etc ...
Peter.O

Acabo de encontrar una referencia en stackoverflow ... gpmes para un "portapapeles" que no es X, y GNU screentiene su propio "portapapeles" también ... Ahora veo por qué los mencionaste ... Esta es una gran información, y me ha llevado a una comprensión más profunda de lo que sucede detrás de escena ... Me atendré al "sistema de selecciones" (clipboad) Xterm básico por ahora ... El "portapapeles" de Linux parece ser muy diferente a Windows, que lo que estaba buscando se puede hacer de una manera muy diferente aquí ... +1 :)
Peter.O
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.