V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xurunfei
V2EX  ›  macOS

求 macos 复制文件到剪贴板命令

  •  
  •   xurunfei · 2020-08-23 11:15:16 +08:00 · 5073 次点击
    这是一个创建于 1537 天前的主题,其中的信息可能已经有所发展或是发生改变。

    注意是复制文件到剪贴板,不是文件内容,目前找到好多命令都是复制内容的,比如 pbcopy 命令范围 shell osascript python 都行,或者有更好的替代方法

    第 1 条附言  ·  2020-08-23 13:28:26 +08:00

    我描述一下mac 下复制一个文件,我用 alfred 剪贴板访问的时候是这样的 图片 而 pbcopy 得到的是a.txt 的内容并不是文件 我需要图中这种形式,就是命令复制后,到一个文件夹直接能粘贴这个文件,而不是仅仅复制了文件的内容

    第 2 条附言  ·  2020-08-23 13:31:34 +08:00
    或者说的最简单的我需要一个命令实现 command+c 的功能
    26 条回复    2024-01-30 19:35:44 +08:00
    lxk11153
        1
    lxk11153  
       2020-08-23 11:44:09 +08:00
    蹲一个~
    Kobayashi
        2
    Kobayashi  
       2020-08-23 12:01:18 +08:00 via Android
    Finder 不知道有没有插件。我用 Forklift,自带此功能,也可以 Forklift 通过自定义命令实现。终端用 ranger 实现。
    ihwbunny
        3
    ihwbunny  
       2020-08-23 12:25:19 +08:00
    pbcopy | pbpaste
    ihwbunny
        4
    ihwbunny  
       2020-08-23 12:27:35 +08:00
    什么叫复制文件,而不复制内容?是文件全路径?
    xgQikk
        5
    xgQikk  
       2020-08-23 12:32:37 +08:00 via iPhone
    你在说什么东西……
    minamike
        6
    minamike  
       2020-08-23 12:45:13 +08:00
    tell application "Finder" to set theItems to selection
    repeat with itemRef in theItems
    set the clipboard to (POSIX file (POSIX path of (itemRef as string)))
    end repeat
    Tink
        7
    Tink  
       2020-08-23 12:52:12 +08:00 via Android
    文件路径?
    goldenlove
        8
    goldenlove  
       2020-08-23 14:01:48 +08:00
    直接 cp 或 scp 不香么?一定要走剪贴板?主要做啥用?
    tyhunter
        9
    tyhunter  
       2020-08-23 14:12:05 +08:00
    临时收集文件吗?考虑下 Yoink 这类
    lxk11153
        10
    lxk11153  
       2020-08-23 14:25:54 +08:00
    @goldenlove #8 可能是类似在 Finder 里先 cmd+c,然后再另一个程序里 cmd+v 吧。
    xgQikk
        11
    xgQikk  
       2020-08-23 14:54:09 +08:00 via iPhone   ❤️ 1
    我还是没听懂他在说什么 解释了这么多 还是没讲清
    littlewing
        12
    littlewing  
       2020-08-23 14:59:49 +08:00
    打开 iTerm2,执行 cp
    lxk11153
        13
    lxk11153  
       2020-08-23 15:12:05 +08:00
    @xgQikk #11 我猜的:
    比如 第一步 在 Finder 里对文件 cmd+c,第二步 在 另一个程序里 cmd+v
    改为 第一步 用命令行完成,第二步 同上
    Mysqto
        14
    Mysqto  
       2020-08-23 16:32:51 +08:00   ❤️ 1
    xurunfei
        15
    xurunfei  
    OP
       2020-08-23 17:38:01 +08:00   ❤️ 1
    @Mysqto 谢谢,就是要的这个 ,也谢谢大家的回复 ,需要的脚本如下
    ```
    #!/usr/bin/osascript
    on run args
    set the clipboard to POSIX file (first item of args)
    end
    ```
    ladychili
        16
    ladychili  
       2020-08-25 09:25:20 +08:00
    hhhhhh
    和 lz 的需求刚好逆向,想知道如何通过一个脚本 /命令获取剪贴板的图片(想做个 Alfred workflow 快速对剪贴板里的图片 google 以图搜图
    xurunfei
        17
    xurunfei  
    OP
       2020-08-25 14:05:34 +08:00
    @ladychili 我这边整理了一点你看看有用没
    ```
    # 复制文件
    osascript -e 'set the clipboard to POSIX file ("/Users/xurunfei/Documents/tmp/a.png")'
    #从剪贴板获取数据然后当做文件路径复制回剪贴板, 这里只是文本,没有试过图片
    osascript -e 'set theData to (the clipboard as text)'
    #另外 python 可以用下面这个从剪贴板读取图片
    img = ImageGrab.grabclipboard()
    ```
    dovme
        18
    dovme  
       2020-08-25 18:12:39 +08:00
    你可能需要的是这个软件 paste
    https://i.loli.net/2020/08/25/mejKfRwQrY3WL6c.png
    xurunfei
        19
    xurunfei  
    OP
       2020-08-26 11:51:12 +08:00
    @dovme 不是,这个功能我的软件自带了,我用的 alfred 的剪贴板,东西已经找到了,可以看 15 楼我的回复
    ivyliner
        20
    ivyliner  
       2020-09-15 13:26:23 +08:00   ❤️ 1
    @xurunfei 我写了一个命令行工具, 解决 #15 楼的 Applescript 的缺点
    1. 不支持批量
    2. 不支持文件相对路径

    项目地址: https://github.com/yujinqiu/pbadd
    xurunfei
        21
    xurunfei  
    OP
       2020-09-15 14:13:48 +08:00
    @ivyliner 好的谢谢,我主要是用在其他软件界面配合 touchbar 和 BetterTouchTool.app 的 applescript 使用,这样我能直接点击 touchbar 按钮直接复制软件对应的文件
    yimq
        22
    yimq  
       2021-03-10 17:47:07 +08:00
    在 big sur 15 楼的脚本好像有权限问题,可以试试这个
    qq() {
    file_real_path=$(realpath $1)
    osascript -e 'tell app "Finder" to set the clipboard to ( POSIX file '\"$file_real_path\"' )'
    open -a WeChat
    }
    Neoth
        23
    Neoth  
       2021-05-23 07:52:01 +08:00
    @yimq 是的
    @Mysqto 给出这个 stack exchange 上的答案有问题,需要先取绝对路径
    Mysqto
        24
    Mysqto  
       2021-05-24 10:29:18 +08:00
    @Neoth https://gist.github.com/mysqto/e3826dbe2772acf1af8e74b0558157c0

    ```
    #!/usr/bin/osascript
    use framework "Appkit"

    property this : a reference to current application
    property NSFileManager : a reference to NSFileManager of this
    property NSImage : a reference to NSImage of this
    property NSMutableArray : a reference to NSMutableArray of this
    property NSPasteboard : a reference to NSPasteboard of this
    property NSString : a reference to NSString of this
    property NSURL : a reference to NSURL of this

    property pb : missing value

    on run argv
    init()
    clearClipboard()
    addToClipboard(argv)
    end run


    to init()
    set pb to NSPasteboard's generalPasteboard()
    end init

    to clearClipboard()
    if pb = missing value then init()
    pb's clearContents()
    end clearClipboard

    to addToClipboard(fs)
    local fs

    set fURLs to NSMutableArray's array()
    set FileManager to NSFileManager's defaultManager()

    repeat with f in fs
    if f's class = alias then set f to f's POSIX path
    set pwd to (FileManager's currentDirectoryPath)
    set fn to (NSString's stringWithString:f)
    set fp to (pwd's stringByAppendingPathComponent:fn)'s stringByStandardizingPath()
    if (FileManager's fileExistsAtPath:fp) then
    (fURLs's addObject:(NSURL's fileURLWithPath:fp))
    end if
    end repeat

    if pb = missing value then init()
    pb's writeObjects:fURLs
    end addToClipboard
    ```
    klovej
        26
    klovej  
       282 天前   ❤️ 1
    @ivyliner 好用,感谢工作
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3131 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 13:11 · PVG 21:11 · LAX 05:11 · JFK 08:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.