将文件的内容复制到剪贴板而不显示其内容

将文件的内容复制到剪贴板而不显示其内容

如何在 UNIX 中复制文件内容而不显示文件内容。我不想使用 cat 或 vi 查看内容。

我想将它们复制到剪贴板,以便可以将其粘贴回 Windows 记事本上。

由于访问限制,我无法将文件从该服务器复制到另一台服务器。

答案1

X11

如果使用 X11(传统 Unix 或 Linux 系统上最常见的 GUI),则无需将文件内容复制到 X11 CLIPBOARD 选择显示您可以使用xclipxsel实用程序。

xclip -sel c < file

或者:

xsel -b < file

将内容存储file为 CLIPBOARD X11 选择。

存储命令的输出:

mycommand | xclip -sel c
mycommand | xsel -b

请注意,应使用 UTF-8 编码存储它,否则粘贴将无法正常工作。如果file使用其他字符集进行编码,则应首先转换为 UTF-8,例如:

<file iconv -f latin1 -t utf8 | xclip -sel c

对于编码为的文件拉丁语1/ISO8859-1

xsel不适用于二进制数据(它不接受空字节),但xclip可以。

将其存储为 CUT_BUFFER (某些应用程序仍然会查询这些缓冲区,例如xterm当没有任何内容声明 CLIPBOARD 或 PRIMARY X 选择并且不需要像选择一样运行进程来为其提供服务时),尽管您可能不希望或现在需要使用它:

xprop -root -format CUT_BUFFER0 8s -set CUT_BUFFER0 "$(cat file)"

(从 中删除尾随换行符file)。

GNU 屏幕

GNUscreenreadbuf命令将文件的内容放入其自己的复制粘贴缓冲区(使用 进行粘贴^A])。所以:

screen -X readbuf file

苹果操作系统/X

尽管Apple OS/X使用X11。除非您运行 X11 应用程序,否则默认情况下不会。您可以使用xclipxsel那里,因为 OS/X 应该将 X11 CLIPBOARD 选择与 OS/X 粘贴板缓冲区同步,但是为此启动 X11 服务器有点浪费。

在 OS/X 上,您可以使用pbcopy将任意内容存储到的命令纸板缓冲区:

pbcopy < file

(文件的字符编码应该是区域设置的字符编码)。存储命令的输出:

mycommand | pbcopy

贝壳

大多数 shell 都有自己的复制粘贴缓冲区。在 emacs 模式下,剪切和复制操作将复制/剪切的文本存储到堆栈中,您可以使用 进行拉取/粘贴Ctrl-Y,然后使用 循环浏览Alt+Y

zsh CUTBUFFER/killring

在 中zsh,堆栈存储在$killring数组中,堆栈顶部存储在$CUTBUFFER变量中,尽管这些变量只能从 Zsh 行编辑器 (zle) 小部件中获得,并且一些专用小部件是操作这些变量的首选方式。

因为这些只能通过 ZLE 获得,所以使用命令来执行此操作有点复杂:

zmodload zsh/mapfile
zle-line-init() {
  if [ -n "$FILE_TO_COPY" ]; then
    zle copy-region-as-kill $mapfile[$FILE_TO_COPY]
    unset FILE_TO_COPY
  fi
}

zle -N zle-line-init
file-copy() FILE_TO_COPY=$1:A       

特殊zle-line-init小部件在每个新命令提示符开始时执行一次。这意味着该文件只会在下一个提示符时被复制。例如,如果您执行:

file-copy file; sleep 2

该文件仅在 2 秒后才会被复制。

答案2

也许你想问这个。但是您想要读取的任何文件都必须通过某些系统调用打开。如果您无权访问文件,则无法读取它。这就是限制访问的想法。

答案3

也许我的解决方案特定于我的设置,但无论如何我会将其放在这里,看看它是否对其他人有帮助。

我可以通过 ssh 访问 (Linux) 服务器,该服务器有一个文件,我希望将其保存在本地 (OSx) 计算机的“剪贴板”中,以便我可以将其粘贴到本地。

来自当地的机器我发出以下命令:

$ ssh user@host 'cat /path/to/file/I/want/in/remote/system' | pbcopy 

现在文件的内容位于我的本地缓冲区中,我可以粘贴到我选择的应用程序中。请注意,当我执行此操作时,文件的内容不会出现在屏幕上,并且内容是通过 ssh 传输的,因此应该与通过 scp 复制文件一样安全(以防担心隐私/安全。)

答案4

我安装了 xclip 并创建了一个名为“copy”的脚本,该脚本将文件名作为其参数。

#! /bin/sh -
exec xclip -selection clipboard -i "$@"

用法示例: copy id_rsa.pub将我的公钥复制到剪贴板。

相关内容