Ошибка сегментации (ядро сброшено) при использовании scp в оболочке bash - PullRequest
0 голосов
/ 28 мая 2018

У меня есть большое количество файлов .jpeg, которые необходимо перенести на удаленный сервер.Удаленный сервер - это капля Digital Ocean, и я работаю в Windows 10. Я использую оболочку Git bash.

Когда я использую этот код (ниже) для передачи своих файлов, используя 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/

Возвращает следующее сообщение об ошибке:

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

Ошибка буквально «переполнение стека».

Это не шутка.Я не пытаюсь никого троллить.Это серьезный вопрос.Я должен это исправить.

Итак, куда мне идти отсюда?

1 Ответ

0 голосов
/ 28 мая 2018

Вы не должны делать звездообразное расширение для «большого количества файлов JPEG» в MSYS или MINGW системах.Это может привести к серьезным проблемам.

Я бы предложил создать архив файлов с помощью команды tar или файла zip (если вы предпочитаете это, но при упаковке файлов jpeg вместе с другимсжатие, такое как zip или gzip, не является необходимым, использует процессор и не приводит к уменьшению размера файлов, так как 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 ~/

Это распакует файлы на ваш домашний каталог.Если вы хотите добавить сжатие (которое я до сих пор не рекомендую в этом случае), вы можете использовать czf и xzf в обеих командах tar.

...