scp/sftp 명령의 출력은 Linux 서버의 표준 출력 및 파일로 진행됩니다.

scp/sftp 명령의 출력은 Linux 서버의 표준 출력 및 파일로 진행됩니다.

원격 서버에서 파일을 가져오기 위해 scp/sftp를 사용하는 릴리스 스크립트를 작성 중입니다. 또한 이 스크립트의 출력을 release.log 파일에 기록하려고 합니다. 나는 이것을 달성하기 위해 "tee"를 사용하고 있으며 모든 것에 대해 잘 작동합니다. stdout 및 오류를 의미하지만 파일 다운로드 진행 상황(복사하는 데 시간이 걸림)에 관해서는 콘솔이나 파일에 표시되지 않습니다. .

티 없이 scp 출력

[email protected]:/apps/flowrisk/valservice/release/London/uat2/vs-server-2.1.16-21190-linux-amd64-frod-uat2-London-dist.zip /apps/flowrisk/uatldn/valservice
vs-server-2.1.16-21190-linux-amd64-frod-uat2-London-dist.zip                                                               100%   78MB  39.1MB/s   00:02

티가 있는 scp 출력

[email protected]:/apps/flowrisk/valservice/release/London/uat2/vs-server-2.1.16-21190-linux-amd64-frod-uat2-London-dist.zip /apps/flowrisk/uatldn/valservice

사용자가 무슨 일이 일어나고 있는지 알 수 있도록 tee를 사용하여 콘솔에서 scp/sftp 명령의 진행 상황도 출력하는 방법을 알려주실 수 있나요?

답변1

로그 파일에 진행률 표시기를 포함하는 것은 그리 유용하지 않은 것 같습니다. scp표준 출력을 터미널에 연결하여 실행해 보는 것은 어떨까요? 이는 전송 중에 스크립트가 중단되면 로그에 진행 상황을 나타내는 내용이 없다는 단점이 있습니다(그러나 이는 부분 전송의 크기를 고려할 때 매우 사소한 단점입니다).

scp remotehost:/path/to/file /local/file >/dev/tty

진행 상황 출력을 저장하려면 scp다음을 사용할 수 있습니다.script.

script -q /dev/stdout -c 'scp remotehost:/path/to/file /local/file' | tee scp.log

또는 다음을 삽입할 수 있습니다.pv파이프라인에서 진행률 표시를 가져옵니다. 총 바이트 수가 아니라 전송된 바이트 수만 알 수 있기 scp때문에 이는 좋지 않습니다 .pv

ssh remotehost 'cat /path/to/file' | pv -bpt >/local/file

답변2

것 같다stdout이 tty가 아닌 경우 scp는 진행률 표시기를 비활성화합니다.. 제가 링크한 기사에는 귀하에게 도움이 될 수 있는 몇 가지 의사 터미널 해킹 기술이 포함되어 있습니다. 또는 scp 소스로 이동하여 isatty()검사를 비활성화할 수도 있습니다.

관련 정보