如何在 UNIX 中复制文件内容而不显示文件内容。我不想使用 cat 或 vi 查看内容。
我想将它们复制到剪贴板,以便可以将其粘贴回 Windows 记事本上。
由于访问限制,我无法将文件从该服务器复制到另一台服务器。
答案1
X11
如果使用 X11(传统 Unix 或 Linux 系统上最常见的 GUI),则无需将文件内容复制到 X11 CLIPBOARD 选择显示您可以使用xclip
或xsel
实用程序。
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 屏幕
GNUscreen
有readbuf
命令将文件的内容放入其自己的复制粘贴缓冲区(使用 进行粘贴^A]
)。所以:
screen -X readbuf file
苹果操作系统/X
尽管Apple OS/X能使用X11。除非您运行 X11 应用程序,否则默认情况下不会。您可以使用xclip
或xsel
那里,因为 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
将我的公钥复制到剪贴板。