? SSH에서 복사할 때 파일 이름에 추가

? SSH에서 복사할 때 파일 이름에 추가

나는 명령을 사용하고 있습니다cp error.log error$HOSTNAME.log

이 명령은 서버에서 자체적으로 실행될 때 제대로 작동하지만 ssh를 사용하여 스크립트로 실행되는 경우 ?파일 이름에 a를 추가합니다. 스크립트에서는 ssh다른 서버의 이름을 사용하여 오류 로그를 로컬로 복사 arerro$HOSTNAME.log하지만 이는 다음과 같이 복사됩니다.arerror$HOSTNAME.log?

답변1

파일 이름에는 실제로 물음표가 포함되어 있지 않을 가능성이 높습니다. 대신 ls명령은 인쇄할 수 없는 문자 대신 이 문자를 표시합니다. 이 문자가 스크립트에서 지정한 파일 이름 끝에 나타나는 것을 고려하면 아마도 캐리지 리턴 문자일 것입니다.

스크립트에 캐리지 리턴이 있는 이유는 무엇입니까? Windows 편집기에서 편집하고 있기 때문입니다. Windows는 개행 문자를 나타내기 위해 두 개의 문자 시퀀스 CR, LF(캐리지 리턴, 줄 바꿈)를 사용하는 반면 Unix는 LF 문자만 사용합니다. 따라서 Unix 관점에서 볼 때 스크립트에는 마지막 문자가 일반 문자 CR인 줄이 포함되어 있습니다.

Unix 편집기를 사용하여 스크립트를 편집하거나 Unix 줄 끝으로 저장할 수 있는 Windows 편집기를 사용하십시오.

생성된 파일을 복구하려면 다음 명령을 사용할 수 있습니다.

cr=$(printf '\r')
find . -name "*$cr" -exec sh -c 'for x do mv "$x" "${x%.}"; done' _ {} +

관련 정보