在 bash shell 中使用 scp 时出现分段错误(核心已转储)

Segmentation fault (core dumped) while using scp in bash shell

我有大量 .jpeg 文件需要传输到远程服务器。远程服务器是一个 Digital Ocean droplet,我在 Windows 10。我正在使用 Git bash shell.

当我使用此代码(如下)通过 scp 传输我的文件时(出于隐私考虑更改了用户名和 IP 地址)。

donald@computer MINGW64 ~/Desktop/RETS Media/extra-large-photos
$ scp -r ./*.jpeg upload@192.199.99.100:/root/srep-3.1.1/dist/assets/extra-large-photos/

它returns这个错误信息:

Segmentation fault (core dumped)

它还会创建一个名为 scp.exe.stackdump 的文件。以下是该文件的内容:

Exception: STATUS_STACK_OVERFLOW at rip=001801DC8B6
rax=00000000002FCBF0 rbx=000000018030B570 rcx=00000000FFE03C40
rdx=00000001801FEA40 rsi=000000018030BEC0 rdi=00000000FFFFCDF0
r8 =00000001801FEA42 r9 =0000000000000000 r10=00000001802DFEA0
r11=00000001802E0068 r12=0000000000000000 r13=0000000000000000
r14=0000000000000000 r15=0000000000000000
rbp=00000000FFFFCCC0 rsp=00000000FFFFCC28
program=C:\Program Files\Git\usr\bin\scp.exe, pid 18872, thread unknown (0x18A4)
cs=0033 ds=002B es=002B fs=0053 gs=002B ss=002B
Stack trace:
Frame        Function    Args
000FFFFCCC0  001801DC8B6 (001800479BE, 00180046A70, 0010040D060, 001801F57E0)
000FFFFCCC0  000004F4BF0 (00180046A70, 0010040D060, 001801F57E0, 00000000000)
000FFFFCCC0  30001000000FF00 (0010040D060, 001801F57E0, 00000000000, 00000000000)
000FFFFCCC0  001800479BE (00000000000, 00000000000, 00000000000, 00000000000)
00000000000  00180045753 (00000000000, 00000000000, 00000000000, 00000000000)
000FFFFFFF0  00180045804 (00000000000, 00000000000, 00000000000, 00000000000)
End of stack trace

错误字面意思是 "Stack Overflow."

这不是开玩笑。 我不是想欺骗任何人。 这是一个严重的问题。 我必须解决这个问题。

那么,我从这里去哪里?

您不应在 MSYSMINGW 系统中的 "large amount of jpeg files" 上进行 star 扩展。这可能会导致一些严重的麻烦。

我建议使用 tar 命令或 zip 文件创建一个 tar 文件球(如果您愿意,但是在打包 jpeg 文件时像 zipgzip 这样的另一个压缩是不必要的,将用完 CPU 并且不会产生更小的文件,因为 jpeg 文件已经被压缩了)。

出于文档目的,我建议您可以在此处阅读 tar 的联机帮助页:https://www.systutorials.com/docs/linux/man/1-tar/

例如,要压缩一个名为 photos 的文件夹,其中包含您的文件,请执行以下操作:

tar -cf photos.tar photos

这将创建文件 photos.tar。您可以通过 scp.

传输此文件

在 Linux 和 下工作的东西应该 在 MSYS 上工作,如果你在 bash 工作而不是 cmd 直接写入 stdout使用 tar,通过 ssh(而不是 scp)传输并再次直接在另一端解压缩:

tar -cf - photos/ | ssh youruser@yourserver.com tar -xf - -C ~/

这会将文件解压缩到您的主目录。如果您想添加压缩(在这种情况下我仍然不推荐),您可以在两个 tar 命令中使用 czfxzf