我正在尝试通过 ssh 将 stdin 数据(文件/照片/视频等)从本地(linux/jailed iOS)转储到远程(Windows)。在本地和远程都是 linux 的正常情况下,此方法有效:
#! /bin/bash
dest="/var/some/dir"
mkdir $dest
cp /dev/stdin $dest/"name.ext"
但是现在我的远程环境更改为 Windows 10(ssh 进入 powershell),只需这样做就会转储损坏的文件并且我无法打开它:
$name="somefilename"
$dest="C:\somedir"
mkdir $dest
$input > "$dest\$name.ext"
我犯了什么错误?我该如何修复它?(scp
不幸的是,类似的工具不适用于 Linux-Windows 设置,因为由于沙盒环境,我传递数据的唯一方式是通过 stdin - Siri Shortcuts)
答案1
我取得了一些成功
base64 < local-file | ssh remote-host '"$Input | Set-Content remote-file"'
这将写入文件的 base64 编码版本因为很难阻止 powershell 尝试解码和重新编码输入并更改行尾等,但它可以对 base64 编码的数据执行所有这些操作,而不会破坏底层数据
两级引号
'"…"'
有助于 powershell 将命令作为单个字符串获取这不会对大文件进行部分传输