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

В 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: я не за менеджером буфера обмена.

13 ответов

Решение

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


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

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

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).

Parcellite

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

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

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

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

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

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

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

ls | clipit;

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

Вы можете использовать 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 файлы последней стабильной версии из раздела " Загрузки" проекта.

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

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

Pastie

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

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

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

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

xclip -selection clipboard -o -t TARGETS

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

ЦЕЛЕВЫЕ

текст / RTF

Текст / RichText

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

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

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

:-)

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

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

Как насчет настроек демона 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,

введите описание здесь

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

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

sudo apt-get install tmux

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

Вы гномеры, вот что вы получаете за использование 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();
}
Другие вопросы по тегам