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

2019-07-24 08:21:43 +08:00
 Contextualist

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

以类似 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,请多提意见!

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

@leoleoasd @LittleWhiteMouse @shuizhengqi
emmm …… 这些工具在传文件给别人时基本要两步:A 把文件放在 B 有读权限的地方,然后 B 从那个地方把文件复制出来。lcp 就是为了解决掉这个中间步骤,A、B 谁先谁后无所谓,而且 A 只管要发什么文件,B 只管要接收到什么地方。
leoleoasd
2019-07-24 10:04:11 +08:00
@Contextualist #5 python3 -m http.server
leoleoasd
2019-07-24 10:04:31 +08:00
@Contextualist #5 发送者只管发傻文件 接受者只管下到哪里
zjiecode
2019-07-24 18:36:46 +08:00
我一直用的
npx http-server
Contextualist
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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/585628

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX