使用终端将文件复制到剪贴板


Answers:


237

如果我理解正确的问题,那么您追求的是pbcopypbpaste

打开终端并执行以下操作:

$ cat ~/Desktop/ded.html | pbcopy

现在该文件在剪贴板中。

要将其放置在其他位置,即粘贴,请执行以下操作:

$ pbpaste > ~/Documents/ded.html

现在,您应该在〜/ Documents中有一个ded.html的副本。


3
这对于处理文本文件非常有用,但是当您尝试使用二进制文件执行任务时将失败。用图像尝试一下,看看我的意思。
伊泰·费伯

7
键入$ cat〜/ Desktop / ded.html后| pbcopy我不能使用cmd + v粘贴文件。尽管$ pbpaste>〜/ Documents / ded.html完成了这项工作。
愤怒的猕猴桃

您也可以通过Finder菜单“ 编辑”>“显示剪贴板”(在优胜美地测试)来查看 OSX剪贴板中的文件内容。
丹妮德

谢谢,我知道如何阅读并将其传递给下一个命令吗?例如cat ~/.emulator_console_auth_token | auth <read_content>
Dominic

这将复制文件的内容,而不是文件本身。
vy32

20

Lri的答案是朝着正确的方向前进的,但是它有两个缺陷:无需使用Finderthe clipboardStandardAdditions OSAX的一部分),并且提供run处理程序是从命令行传递参数的更可靠的方法。 (自10.4开始)。进行这两项更改将大大简化将程序输入Shell所需的“转义”操作。

这是我的版本(包装在shell函数中,您可以将其放入(例如).bashrc使其在shell中可用):

file-to-clipboard() {
    osascript \
        -e 'on run args' \
        -e 'set the clipboard to POSIX file (first item of args)' \
        -e end \
        "$@"
}

file-to-clipboard ~/Desktop/ded.html

然后可以将使用此脚本放置在剪贴板上的文件粘贴到Finder中,以将文件复制到另一个文件夹。

osascript也可以用作hash-bang解释器(自10.5开始)。将此放入文件(例如file-to-clipboard

#!/usr/bin/osascript
on run args
  set the clipboard to POSIX file (first item of args)
end

使文件可执行(chmod +x /path/to/where/ever/you/put/file-to-clipboard)。然后像这样运行它:

/path/to/where/ever/you/put/file-to-clipboard ~/Desktop/ded.html

如果将其存储在PATH中的目录中,则可以省略“脚本”文件的路径。


@Lri:Finder不了解明显的内容set the clipboard to {one,two}(尽管另一个AppleScript程序可以成功提取列表)。所述StandardAdditions剪贴板命令可以被限于单个项目。
克里斯·约翰森

1
可以用于多个文件吗?
VitalyB '16

注意:给定的路径必须是脚本正常工作的绝对路径。
狮子座

8

无法使用命令行来实现您要执行的操作。尽管Apple提供了pbcopypbpaste工具来允许基本的文本复制,但是您不能使用这些工具以所需的方式复制文件。

无需过多讨论技术细节,使用来在Finder中“复制”文件时C,实际上并没有复制文件本身,只是在剪贴板上引用了该文件并将其标记为文件引用。当应用程序在粘贴时收到此引用时,它有责任对内容进行整理,弄清楚粘贴的内容,并最终根据需要使用文件。本质上,当您在Finder中复制文件时,它会以某种方式将文件的路径保存到特定的剪贴板中,并且在粘贴时,它会接收到该文件路径,并且知道使用该文件的内容来创建新文件。旧文件(将文件复制到剪贴板,将其删除,尝试将其粘贴到其他位置,然后看看会发生什么)。

在复制和粘贴的意义上,手头上可用的工具不足以完成您所需的工作。正如boehj建议的那样,您可以尝试将旧文件的内容复制到新文件中,但这仅适用于文本文件。您获取的所有二进制文件都将被损坏(尝试对图像进行操作–它已损坏)。

传统的命令行将使您失败,但是您可以查看是否要在AppleScript中执行此操作,然后通过使用命令行来调用它osascript


您对图像等是正确的。我没有想到这一点。我猜我误解了这个问题,因为尽管pbcopy并且pbpaste可以使用.html文件,但这仅是因为它恰好是文本文件。
boehj 2011年

不,您正确理解了这个问题,只是您假设这些工具按其应有的方式工作了,而事实并非如此。他们是越野车,甚至不打算那样工作,尽管苹果在文档方面做得很差。如果输入pbcopy -help,您将得到一条非生产性的NSLog()行,只需重复一次即可'pbcopy -help'。它有助于成为一个程序员了解这一点,这就是为什么我觉得有必要插入内容。
板井Ferber的

1
是的,没问题。;)
Itai Ferber

1
希望pbcopy引起注意的任何人都可能会获得一个免费的开发人员帐户并提交一些bug- bugreport.apple.com-不能保证会有所帮助,但是如果有足够的人仍然在意的话,它可以使工程师有时间来从事这些工作。 。
bmike

1
OP可以通过CLI上的AppleScript实现他们想要的功能吗?

7

以下功能仅适用于单个文件,不适用于多个文件。它需要GNU readlink,您可以通过运行来安装它brew install findutils

copy(){ osascript -e{'on run{a}','set the clipboard to posix file a',end} "$(greadlink -f -- "$1")";}

编辑:我删除了tell app "Finder"块。

编辑2:恢复为支持相对路径的版本。


2
这实际上有效!
Bemmu'3

6

pbcopy < filename终端中的执行命令将复制名为的文件的内容filename


3

要将文件复制到目标,请使用cp命令。

cp /path/to/file /path/to/destination

请参阅man cp以获取更多信息。


2
这不是回答将剪贴板作为目标位置的问题的答案。
kellyfj

2

这是一个简单的Shell / Bash脚本。只需将其粘贴到您的.bashrc文件(或类似文件)中:

file-to-clipboard() {
    if [ -z "$1" ]; then
        echo "file path/name:"
        read FILE
    else
        FILE="$1"
    fi
    pbcopy < "$FILE"
}

0

支持相对文件:

clip_img() {
    osascript -e 'on run argv' \
        -e 'set currentDir to do shell script "pwd"' \
        -e 'set the clipboard to (read POSIX file (POSIX path of (currentDir as text & (first item of argv) )) as JPEG picture)' \
        -e 'end run' "/$1"
    # osascript -e 'clipboard info'
}

运行clip_img path-to-file以将图像复制到剪贴板,并且path-to-file可能是相对的。该文件可以是jpeg或png文件。


-2

您可以在Unix环境中使用cat'originfile'>'destinationfile';

在Windows上复制originfile destinationfile。


2
如何将文件放置在剪贴板上?
grg
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.