在Windows中,我使用了命令行剪贴板复制和粘贴实用程序...



pclip.exegclip.exe

这些是Windows的UnixUtils端口。 (但他们只处理纯文本)。还有其他一些本机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/…

stackoverflow.com/questions/749544/pipe-to-from-clipboard

vim [enter]“ + P:3(运行vim,然后从“注册-即系统剪贴板-粘贴文本”)。这样一来,您就可以掌握最好的文本编辑器(其中之一),因此可以使用:w filename。另外,我总是在tmux中运行vim,这意味着如果我需要将一些文本复制到终端上,我只需选择(用v或V进行行选择),然后选择“ + y(将其拉或复制到剪贴板),然后创建一个新的tmux窗格,并可以 + + v进行粘贴。此外,如果需要将剪贴板写入文件,我会偶尔使用xsel -b> filename。
从macOS终端应用程序或类似物中通过ssh使用完整的非GUI Ubuntu的情况如何?

#1 楼

xsel

我正在使用xsel安装xsel,但仅将其与纯文本和unicode文本一起使用。

xsel可以复制并粘贴到三个不同的“剪贴板”。 br />
默认情况下,它使用“ X窗口系统”主要选择,基本上就是当前选择中的任何内容。 X Window系统还具有一个辅助选择(使用不多)和一个剪贴板选择。您可能正在寻找剪贴板的选择,因为这是桌面环境(例如Gnome,KDE,XFCE)用于剪贴板的内容。要将其与xsel一起使用:

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


评论


Adi ... xsel似乎只是基于文本的(如您所述),所以我将寻找更全面的实用程序...但是,阅读其信息文档对我来说非常有趣...我知道(在终端中)单击鼠标中键会将当前选定的文本粘贴到命令行中,但是我没有意识到此功能适用于大多数X应用程序。通过单击鼠标中键粘贴(但某些应用似乎可以覆盖它)两个剪贴板!非常方便..我必须阅读有关第三个X选择缓冲区的更多信息。

– Peter.O
2010年11月7日15:14



xsel确实可以处理Unicode文本。您可以在freedesktop Wiki页面上阅读有关X剪贴板的更多信息:freedesktop.org/wiki/Specifications/ClipboardsWiki。

– Adi Roiban
2010年11月7日在16:27

我得把这个新信息弄清楚。3个剪贴板!主要,中学,剪贴板...这与我在Windows中使用的非常不同...第三个“ CLIPBOARD”似乎与Windows / Mac剪贴板相同...但是可笑的是这里晚..明天我会回到这个……(有点儿生气,但是现在阅读太多了。)

– Peter.O
2010年11月7日在16:54



谢谢... xsel可以完成此工作(用于文本)...其他格式可能会出现问题。

– Peter.O
2010年11月9日20:17

xsel -b是xsel --clipboard的缩写。

–安德烈·杜马(Andrei Duma)
2015年9月28日14:26在

#2 楼

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
2010年11月8日在7:03

xclip也仅处理文本选择。

–史蒂夫·比蒂(Steve Beattie)
2010年11月8日在22:04

另外,该命令可以与xclip -se c一样短

–杰利姆·安格利姆
2011年10月5日,下午1:05

我不明白为什么这不在手册页中

– Sergiy Kolodyazhnyy
15年4月24日在6:37

尝试将图像粘贴到文件时出现此错误:目标图像/ png不可用

–埃米利奥·尼古拉斯(EmilioNicolás)
16年7月21日在12:08

#3 楼

Parcellite
我多年来一直使用Parcellite作为剪贴板管理器。它在通知区域中运行,并提供了许多用于管理“主要选择”和标准freedesktop.org剪贴板的选项。

这是我管理剪贴板项目的答案。

评论


这看起来像是一个很好的面板应用程序。“操作”很方便……但是不幸的是,它不是我想要的工具类型。也许我所追求的只是一个晦涩的Python脚本之类的东西……有几个非常好的纯Windows实用程序可用,所以我认为等效的东西会在Ubuntu / Linux世界...

– Peter.O
2010年11月7日在16:18

仅供参考,Parcellite具有很酷的功能-复制文本的历史记录。要从历史记录对话框激活自动粘贴,您还应该安装xdotool

– Noam Manos
18年1月25日在14:01

#4 楼

我最近遇到了工具xclip-copyfilexclip-cutfilexclip-pastefile(软件包xclip)。这些工具可让您通过命令行复制/剪切/粘贴整个文件。

您可以在此处查看其手册页。

#5 楼

clipit

ls | clipit


评论


我出于其他原因使用ClipIt,但不知道它能够从终端获取数据。非常感谢您提供该信息。

–朱拉·洛林(Juraj.Lorinc)
17/12/23在13:33

#6 楼

您可以为此使用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


查看其Wiki了解更多文档和使用示例。

您可以通过ppa:noobslab / indicators PPA进行安装,也可以从项目的“下载”部分手动下载预先打包的最新稳定版.deb文件。

评论


PPA并不是最新的,至少对于Ubuntu 16.04而言,最好直接从CopyQ的GitHub版本下载。

–尼古拉
17年1月1日在15:32

#7 楼

如果只想将一些文本复制到剪贴板:

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

#8 楼

Pastie
最近发布了一个新的具有指标Applet支持的剪贴板管理器(尽管尚未保存在档案中)。除了跟踪文本剪贴板历史记录之外,它还将捕获并保存数据剪贴板条目(文件,文件夹等),如果您通过GUI /剪贴板环境大量操作文件,这可能会很有用。 >您可以添加以下PPA:ppa:hel-sheep/pastie

评论


感谢Marco的建议,但我不需要剪贴板管理器。有时,我会将一些临时文本粘贴到文本文件中,但实际上我发现“历史记录管理器”会使速度变慢(但这只是我自己。)。我真的很喜欢命令行工具,该工具可以选择性地提取/存储我假定Ubuntu剪贴板类似于Windows剪贴板(如果它与众不同,我会大吃一惊,因为在任何平台上用户的要求都是相同的),我会感到惊讶。)确保有人会发现您的建议有用。

– Peter.O
2010年11月7日15:45



#9 楼

GPaste守护程序设置(具有DBus界面的剪贴板管理守护程序小程序)怎么样:


GPaste是用Vala编写的GNOME剪贴板管理套件,它已经更新为更好。适用于最新的GNOME
守护进程现在完全平衡(不再轮询,耗电量更少)
GPasteClipboard现在具有类似于GtkClipboard的“所有者更改”信号
新设置以设置最大数量历史记录中的数据使用的内存容量已被删除
(缺少设计)
代码清除和现代化操作
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,则还要安装gnome-shell-extensions-gpaste)。

另一种选择是通过software-center安装。 4312010q

#10 楼

我正在尝试开发一种不是剪贴板管理器的更好的解决方案,可以从https://github.com/baitisj/copypasta找到。它目前还不能正确处理RTF和HTML,并且大图像会带来问题,但可以随意分叉并提交补丁。

#11 楼

对于RTF格式,请使用以下过程:
我将文本复制到应用程序的剪贴板中。如果不确定是rtf还是什么,我可以使用以下命令进行验证:

xclip -selection clipboard -o -t TARGETS


打印出类似以下内容时: > TARGETS

text / rtf

text / richtext

所以我忍不住大声喊道:“天哪,真是太好了!上帝保佑linux!”经过那一刻的祈祷之后,很明显的事情发生了:

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


然后我在libreoffice中处理所有这些内容,并将其作为垃圾邮件发送给我的所有朋友。

:-)

#12 楼

就在这里。尝试比tmux更高级的screen。要安装tmux,请在终端中键入以下内容:

sudo apt-get install tmux


也尝试gpmgpmtmux命令可能是一个很好的组合...

评论


屏幕是一个多终端模拟器,而不是剪贴板管理器。

– Marco Ceppi♦
2010年11月7日14:25

屏幕和tmux似乎只能在终端级别使用(我在他们的任何一个信息文档中都找不到“剪贴板”的引用)...我正在寻找的是系统范围的剪贴板复制和粘贴实用程序...我可能不应该将终端用作标签...我想要的实用程序类型将能够通过std-in / std-out或file-in / file-out进行读取/写入,并能够处理Unicode /富文本/图片/等剪贴板格式...

– Peter.O
2010年11月7日14:30



我刚刚找到了关于stackoverflow的参考... gpm用于非X终端“剪贴板”,而GNU屏幕也具有自己的“剪贴板” ...现在我明白了为什么你提到它们了...太好了信息,这使我对幕后发生的事情有了更深的了解……我现在将继续使用基本的Xterm“选择系统”(clipboad)。.Linux“剪贴板”似乎是如此不同到Windows,我一直在寻找的东西可能以一种非常不同的方式完成。+1 :)

– Peter.O
2010年11月9日,19:54



#13 楼

哟,侏儒,这就是使用CORBA废话所能得到的。
对于yar软件,没有什么比使用默认情况下未安装的工具更好的了。

如果您使用的是适当的桌面环境(例如KDE-plasma),您就不会遇到此问题,因为您可以使用dbus,无论使用哪种软件,例如控制台:

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


我个人实际上实际上是使用C#直接连接到dbus,这意味着我不需要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();
}