Утилита копирования и вставки буфера обмена из командной строки?


127

В Windows я использовал утилиты копирования и вставки буфера обмена из командной строки ...

  • pclip.exe а также gclip.exe

Это были порты UnixUtils для Windows (но они обрабатывали только простой текст). Существовала пара других собственных утилит Windows, которые могли писать / распаковывать любые форматы.

Я искал что-то похожее в Synaptic Package Manager, но ничего не могу найти.

Есть ли что-то, что я пропустил? ... или это доступно в скриптах Bash?

Тип утилиты, которую я хотел бы, сможет читать / писать через std-in / std-out или file-in / file-out и обрабатывать Unicode, Rich Text Format, изображения и т. Д. Форматы буфера обмена ...

NB: я не за менеджером буфера обмена.


См. Связанный вопрос от unix.SE: unix.stackexchange.com/questions/30093/…
landroni


vim[enter]"+P : 3 (запустить vim, а затем из " реестра - т.е. системный буфер обмена - вставить текст) . Тогда у вас есть (один из) лучший текстовый редактор (ы) у вас под рукой, так что вы можете :w filename. Кроме того , я всегда запускать Vim в tmux , что означает , что если мне нужно скопировать немного текста к терминалу, я просто выбрать (с vили Vдля выбора линии) , а затем "+y(который дергает или копирует в буфер обмена), то я сделать новый Панель tmux и можно <ctrl> + <shift> + v вставить. Кроме того, я буду иногда использовать, xsel -b > filenameесли мне нужно записать буфер обмена в файл. Приветствия ^ u ^
dylnmc

Ответы:


131

Я использую xsel Установите xsel , но я использую его только с обычным текстом и текстом Юникода.


xselможно копировать и вставлять в три разных «буфера обмена». По умолчанию он использует основной выбор X Window System , который в основном соответствует тому, что в данный момент находится в выборе. Система X Window также имеет дополнительный выбор (который используется не часто) и выбор буфера обмена . Вы, вероятно, ищете выбор буфера обмена , поскольку именно это среда рабочего стола (например, Gnome, KDE, XFCE) использует для своего буфера обмена. Чтобы использовать это с xsel:

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

1
Adi ... xsel кажется (?) Только текстовым (как вы уже упоминали), поэтому я поищу более комплексную утилиту ... Однако мне было очень интересно прочитать ее информационную документацию ... Я знал, что щелчок средней кнопкой мыши (в Терминале) вставит выбранный в данный момент текст в командную строку, но я не осознавал, что эта функция применима к большинству приложений X ... Самый последний выбор текста может быть вставляется с помощью среднего щелчка (но некоторые приложения, кажется, перезаписывают его) .. Два буфера обмена! .. Очень удобно .... Я должен прочитать больше о 3-м буфере X-выбора.
Peter.O

xsel работает с текстом Unicode. Вы можете прочитать больше о X буферах обмена на вики-страницах freedesktop : freedesktop.org/wiki/Specifications/ClipboardsWiki .
Ади Ройбан

Я должен обдумать эту новую информацию .. 3 буфера обмена! ПЕРВИЧНАЯ, ВТОРИЧНАЯ, КЛИПБОЧКА ... Это очень отличается от того, к чему я привык в Windows ... Третий КЛИПБОЧКА, похоже, такая же, как буфер обмена Windows / Mac ... но здесь смехотворно поздно .. Я вернусь к этому завтра ... (Inersting, но слишком много, чтобы читать сейчас ..)
Peter.O

Спасибо ... xselделает работу (для текста) ... Что-то может появиться для других форматов.
Peter.O

6
xsel -bэто сокращение от xsel --clipboard.
Андрей Дума

85

xclip Установите xclip может быть одним из ваших вариантов.

cat samples.sh | xclip -sel clip

Вы также можете установить его в файле .bashrc, используя псевдоним.

alias clipboard='xclip -sel clip'

Ключ для вставки двоичных данных в файл xclip- указать, какие типы носителей у вас есть в буфере обмена. Для PNG вы можете:

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

Так что теперь ~/Dropbox/.mybashrc;) вы можете добавить псевдоним (clipboard2photo) легко вставить в файл изображения (может быть , когда - нибудь мы будем иметь его на Nautilus ).


Это выглядит хорошо, но у меня просто не было возможности разобраться в этом, пока ... Я сделаю это как можно скорее ...
Peter.O

xclip также обрабатывает только выделенные тексты.
Стив Битти

2
Кроме того, команда может быть короткой, какxclip -se c
Джером Anglim

1
Я не понимаю, почему этого нет на странице руководства
Сергей Колодяжный,

1
Я получаю это при попытке вставить изображения в файл Ошибка: целевое изображение / png недоступно
Эмилио Николас

12

Parcellite

Я много лет использовал parcellite в качестве менеджера буфера обмена. Он работает в области уведомлений и предлагает множество возможностей для управления как основным выбором, так и стандартным буфером обмена freedesktop.org.

Иконка панели задач

Это был мой ответ на управление элементами буфера обмена.

предпочтения


Это похоже на хорошее приложение панели. "Действия" удобны ... но, к сожалению, это не тот тип инструмента, который я ищу ... Я переформулировал свой вопрос, чтобы включить некоторую более конкретную информацию ... Может быть, именно то, что мне нужно, это неясный скрипт на Python или что-то подобное ... Было несколько очень хороших нативных утилит, предназначенных только для Windows, так что я бы подумал, что эквивалент будет где-то в Ubuntu / Мир Linux ...
Peter.O

К вашему сведению, у Parcellite есть интересная особенность - история скопированного текста. Чтобы активировать автоматическую вставку из диалога истории, вы также должныinstall xdotool
Noam Manos

10

Недавно я наткнулся на инструменты xclip-copyfile, xclip-cutfileи xclip-pastefile(пакет xclip). Эти инструменты позволяют копировать / вырезать / вставлять целые файлы через командную строку.

Вы можете увидеть их справочную страницу здесь.


10

clipit ( http://clipit.rspwn.com/ ) - менеджер буфера обмена для gtk, который позволяет передавать текст из командной строки:

ls | clipit;

Редактировать: В настоящее время на официальном сайте ClipIt ничего нет, но вы можете получить его с GitHub


Я использую ClipIt по другим причинам и не знал, что он способен получать данные с терминала. Большое спасибо за эту информацию.
Juraj.Lorinc

3

Вы можете использовать CopyQ для этого. С сайта:

Менеджер буфера обмена с расширенными функциями

  • CopyQ - менеджер буфера обмена с возможностью поиска и редактирования истории.
  • Поддерживает Linux и Windows.
  • Экспериментальная поддержка OS X 10.9+.
  • Храните текст, HTML, изображения и любой другой пользовательский формат.
  • Расширенный интерфейс командной строки и скриптов.

Чтобы скопировать текстовый файл:

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

Чтобы скопировать изображение (необходимо указать тип MIME):

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

Чтобы скопировать файл данных (необходимо указать тип MIME):

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

Проверьте их вики для получения дополнительной документации и примеров использования .

Вы можете установить его либо через PPA ppa: noobslab / Indicators, либо вручную загрузив предварительно упакованные .debфайлы последней стабильной версии из раздела « Загрузки» проекта .


1
Ppa не устарел, по крайней мере, для Ubuntu 16.04, его лучше скачать прямо с сайта GitHub, посвященного релизам CopyQ .
Николай

3

Если вы просто хотите скопировать текст в буфер обмена:

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


2

Pastie

Недавно был выпущен новый менеджер буфера обмена с поддержкой индикатора-апплета (но пока не в архиве). В дополнение к отслеживанию истории буфера обмена, он также будет захватывать и сохранять записи буфера обмена данных (файлы, папки и т. Д.), Что может быть полезно, если вы много манипулируете файлами через среду графического интерфейса / буфера обмена.

альтернативный текст

Вы можете добавить следующий PPA :ppa:hel-sheep/pastie


Спасибо за предложение, Марко, но мне не нужен менеджер буфера обмена. Иногда я вставляю некоторый временный текст в текстовый файл, но на самом деле я обнаруживаю, что «менеджер истории» замедляет работу (но это только я) .. Мне действительно нужен инструмент командной строки, который может выборочно извлекать / хранить конкретный формат от / до clipboad .. Я предполагаю , что буфер обмен Ubuntu похож на тот , Windows , (я бы ошеломлен , если он значительно отличается, потому что пользователями требование одинаково на любой платформе) ... Я Я уверен, что кто-то найдет ваше предложение полезным.
Peter.O

1

Я думаю, что следующий инструмент удовлетворит ваши требования:

Вырезать и вставлять файлы в терминал


Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить здесь основные части ответа и предоставить ссылку для справки.
Гюнтберт

1

Как насчет настроек демона GPaste , апплета демона управления буфером обмена с интерфейсом DBus:

  • GPaste - это пакет управления буфером обмена для GNOME, написанный на Vala
  • Внешний вид настроек GPaste обновлен, чтобы лучше соответствовать недавнему GNOME
  • Демон теперь полностью равномерный (больше не опрос, меньше энергопотребление)
  • GPasteClipboard теперь имеет сигнал «смена владельца», аналогичный сигналу GtkClipboard
  • Новая настройка для установки максимального объема памяти, используемой данными в истории
  • Режим FIFO отключен (отсутствует дизайн)
  • Очистка и модернизация кода
  • g_paste_history_add теперь передан полностью
  • g_paste_keybinder_add_keybinding теперь передан полностью

Монтаж:

Чтобы установить его в Ubuntu 13.10 , 13.04 , 12.10 или 12.04 , используйте команды ниже:

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

Или установить gpasteчерез synaptic package manager(а также gnome-shell-extensions-gpasteесли вы используете Gnome-Shell).

Другим вариантом является установка через software-center.

введите описание изображения здесь


1

Я пытаюсь разработать лучшее решение, не являющееся менеджером буфера обмена, которое можно найти по адресу https://github.com/baitisj/copypasta . Он еще не совсем правильно обрабатывает RTF и HTML, а большие изображения создают проблемы, но вы можете свободно размещать и отправлять патчи.


1

Для формата RTF я использую эту процедуру: я копирую текст в буфер обмена в приложении. Если я не уверен, что это rtf или что, я использую эту команду для проверки:

xclip -selection clipboard -o -t TARGETS

Когда он печатает что-то вроде этого:

ЦЕЛЕВЫЕ

текст / RTF

Текст / RichText

Поэтому я не могу удержаться от того, чтобы громко воскликнуть: «Ну и дела, это гениально! Боже, благослови Linux!» После этого выстрела следует только очевидная вещь:

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

Затем я обрабатываю все это в libreoffice и рассылаю всем своим друзьям как спам.

:-)


0

Вы гномеры, вот что вы получаете за использование CORBA-дерьма.
Нет ничего лучше для программного обеспечения YAR, чем использование инструментов, не установленных по умолчанию.

Если бы вы использовали правильную рабочую среду, такую ​​как KDE-plasma, у вас не было бы этой проблемы, потому что вы могли бы просто использовать dbus из любого программного обеспечения, которое вам нравится, например из консоли:

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

Лично я на самом деле подключаюсь к dbus напрямую с C #, что означает, что мне не нужен qdbus.
Это, вероятно, бесполезно для вас, так как у вас нет klipper, но я все равно упомянул об этом, просто чтобы раздражать вас тем, как это делается правильно.

PS: не копируйте этот код C #, Task.Result может зайти в тупик.

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

Да, есть. Попробуйте tmuxчто-то более продвинутое, чем screen. Чтобы установить tmux, введите это в терминале:

sudo apt-get install tmux

Также попробуйте gpm. Команды gpmи tmuxможет быть хорошей комбинацией ...


2
Screen - это эмулятор нескольких терминалов, а не менеджер буфера обмена.
Марко Чеппи

Кажется, что screen и tmux работают только на уровне терминала (я не могу найти ссылки на «буфер обмена» в их информационной документации) ... Я ищу общесистемную утилиту для копирования и вставки буфера обмена ... Я, вероятно, не должен был использовать терминал в качестве тега ... Тип утилиты, которую я хочу, сможет читать / писать через std-in / std-out или file-in / file-out и обрабатывать Unicode / Форматы буфера Rich-text / Picture / etc ...
Peter.O

Я только что нашел ссылку на stackoverflow ... gpmдля не-X терминала "clipboard", и также GNU screenимеет свой собственный "clipboard" ... Теперь я понимаю, почему вы упомянули их ... Это отличная информация, и это привело меня к более глубокому пониманию того, что происходит за кулисами ... Сейчас я буду придерживаться базовой «системы выбора» (clipboad) Xterm. «Буфер обмена» Linux, похоже, настолько отличается от Windows, что то, что я искал, может быть сделано совсем по-другому здесь .. +1 :)
Peter.O
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.