如何在 UNIX 中复制文件内容而不显示文件内容。我不想 cat 或 vi 看到内容。
我想将它们复制到剪贴板,以便我可以将其粘贴回我的 Windows 记事本。
由于访问限制,我无法将文件从该服务器复制到另一台服务器。
Sté*_*las 132
如果使用 X11(传统 Unix 或基于 Linux 的系统上最常见的 GUI),要将文件内容复制到 X11 CLIPBOARD 选择而不显示它,您可以使用xclip或xsel实用程序。
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)。
GNUscreen有readbuf命令将文件的内容拖入其自己的复制粘贴缓冲区(您使用 粘贴^A])。所以:
screen -X readbuf file
Run Code Online (Sandbox Code Playgroud)
虽然 Apple OS/X可以使用 X11。除非您运行 X11 应用程序,否则默认情况下不会。您将能够使用xclip或xsel在那里,因为 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,堆栈存储在$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 秒后复制。