V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Contextualist
V2EX  ›  分享创造

零配置命令行局域网传文件/剪贴板

  •  
  •   Contextualist ·
    Contextualist · 2019-07-24 08:21:43 +08:00 · 2324 次点击
    这是一个创建于 1709 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这个脚本的应用场景很简单:

    以类似 cp 的体验,将文件 /剪贴板复制给局域网内的另一个人

    比如 A 想给 B 一个文件夹的数据,B 想把它放在本地的项目中测试,那么:

    # A:
    ~/archive $ lcp data/001/ B.local
    
    # B:(网络名 B.local (太长了? lcp 也支持自定义别名哒))
    ~/project/data $ ls
    ~/project/data $ lcp -d 001-A
    ~/project/data $ ls
    001-A
    

    接收者可决定将文件放哪里和 /或重命名,有那么点儿 AirDrop 的意味。

    为什么写这个?一方面,有时候我们对分享只是一次性的轻量需求,借助一个中途的共享空间显得又些多余。另一方面,这跟 scp 的应用场景稍有区别,我是希望这两者互补的。scp 更适合“自己传给自己”,毕竟发送和接收的的用户都应该是属于你的,而且 scp 的使用者一人指定了文件的起点和终点。

    那么,请试一下:(在努力适配 *nix,有兼容性问题请提出)

    # 默认是不启用剪贴板集成的。要使用请在安装前将环境变量 `LCP_CLIPBOARD=1` 写进你的 shell profile。
    bash <(curl -Ls https://lcp.now.sh/get)
    

    这背后其实没什么技术含量,就是 V 站经常见到的传文件技巧: tar czf - | nc $host $port 然后 nc -l $host $port | tar xz。我在命令行传文件给别人总找不到什么干净利落的方法(我们实验室是在每台机子上建所有人的用户然后互相 scp 的……),看到这个很是喜欢,又觉得写个 alias 不够,就干脆封装个交互舒服一点的 Bash 脚本,然后顺手做了剪贴板。当然,如果各位有更好的方法请无情打脸,我就当写 Bash 练个手吧。

    因为是个简单的实现,没有任何加密与鉴权处理,请务必仅在信任的局域网中使用

    项目: https://github.com/Contextualist/lcp

    第一次认真写 Bash,请多提意见!

    9 条回复    2019-07-25 08:20:24 +08:00
    tidaizhe
        1
    tidaizhe  
       2019-07-24 09:11:24 +08:00
    python -m SimpleHTTPServer 3000 多方便
    leoleoasd
        2
    leoleoasd  
       2019-07-24 09:22:20 +08:00
    scp 多方便
    LittleWhiteMouse
        3
    LittleWhiteMouse  
       2019-07-24 09:23:43 +08:00
    Ditto
    shuizhengqi
        4
    shuizhengqi  
       2019-07-24 09:44:58 +08:00
    sftp,ftp,rsync 不好使吗
    Contextualist
        5
    Contextualist  
    OP
       2019-07-24 09:59:25 +08:00
    @tidaizhe
    一两个文件还 OK,文件夹就有些费劲。而且感觉这个下载的话比较浏览器友好吧,命令行就麻烦

    @leoleoasd @LittleWhiteMouse @shuizhengqi
    emmm …… 这些工具在传文件给别人时基本要两步:A 把文件放在 B 有读权限的地方,然后 B 从那个地方把文件复制出来。lcp 就是为了解决掉这个中间步骤,A、B 谁先谁后无所谓,而且 A 只管要发什么文件,B 只管要接收到什么地方。
    leoleoasd
        6
    leoleoasd  
       2019-07-24 10:04:11 +08:00
    @Contextualist #5 python3 -m http.server
    leoleoasd
        7
    leoleoasd  
       2019-07-24 10:04:31 +08:00
    @Contextualist #5 发送者只管发傻文件 接受者只管下到哪里
    zjiecode
        8
    zjiecode  
       2019-07-24 18:36:46 +08:00
    我一直用的
    npx http-server
    Contextualist
        9
    Contextualist  
    OP
       2019-07-25 08:20:24 +08:00
    @leoleoasd @mrjiejiejie
    用 HTTP 文件 server,要么发的人需要整理(移动 /打包)文件,要么收的人就要满地找文件了,还有就是对文件夹传输不友好。如果我的例子用 HTTP server 重写,大概就是这个样子了:

    # A:
    ~/archive $ tar czf 1.tar.gz -C data 001 && python3 -m http.server
    (同理上面后半部分可换 npx http-server )

    # B:
    ~/project/data $ curl A.local:8000/1.tar.gz | tar xz && mv 001 001-A
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   956 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 21:46 · PVG 05:46 · LAX 14:46 · JFK 17:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.