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

Web*_*ash 121 file-copy

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

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

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

Sté*_*las 132

X11

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

xclip -sel c < file
Run Code Online (Sandbox Code Playgroud)

或者:

xsel -b < file
Run Code Online (Sandbox Code Playgroud)

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

要存储命令的输出:

mycommand | xclip -sel c
mycommand | xsel -b
Run Code Online (Sandbox Code Playgroud)

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

<file iconv -f latin1 -t utf8 | xclip -sel c
Run Code Online (Sandbox Code Playgroud)

对于以latin1 / iso8859-1编码的文件。

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

将它存储为 CUT_BUFFER(那些仍然被一些应用程序查询,比如xterm当没有任何东西声明 CLIPBOARD 或 PRIMARY X 选择并且不需要运行一个进程来为它提供服务时,就像选择一样),尽管你可能不想要或现在需要使用它:

xprop -root -format CUT_BUFFER0 8s -set CUT_BUFFER0 "$(cat file)"
Run Code Online (Sandbox Code Playgroud)

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

GNU 屏幕

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

screen -X readbuf file
Run Code Online (Sandbox Code Playgroud)

苹果操作系统/X

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

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

pbcopy < file
Run Code Online (Sandbox Code Playgroud)

(文件的字符编码应该是语言环境的字符编码)。要存储命令的输出:

mycommand | pbcopy
Run Code Online (Sandbox Code Playgroud)

贝壳

大多数 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       
Run Code Online (Sandbox Code Playgroud)

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

file-copy file; sleep 2
Run Code Online (Sandbox Code Playgroud)

文件只会在 2 秒后复制。

  • 我正面临这个错误:`错误:无法打开显示:(空)` (4认同)
  • @MarceloFilho,`xclip`和`xsel`是X11实用程序,它们操作X11选择,因此只能在设置了`$DISPLAY`的X11环境中使用。 (3认同)

ikr*_*bbe 3

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