[server] scp가 항상 디렉토리를 덮어 쓰거나 작성하게하십시오

scp를 사용하여 하나의 원격 서버에서 다른 원격 서버의 새 디렉토리로 디렉토리를 복사합니다 (예 : 이름 변경).

scp -prq server1:dir1 server2:dir2

dir2가 server2에 존재하지 않으면 제대로 작동하고 server1의 dir1에서 모든 것을 포함하는 dir2라는 새 디렉토리를 만듭니다.

dir2가 이미 server2에 존재할 때 문제가 발생합니다 (참고 :이를 미리 알거나 server2의 dir2에서 제거를 수행 할 방법이 없습니다)-dir2에 dir1이라는 dir1의 사본이 생깁니다.

누락 된 기본 사항이 있다고 확신하지만 해결할 수없는 것 같습니다.

도움을 주시면 감사하겠습니다!

문안 인사,

자일

좋아, 나는 10 미만의 담당자가 있고 8 시간을 기다릴 수 없기 때문에 여기에 내가 얻은 것이 있습니다.

나를 위해 작동하는 스크립트는 다음과 같습니다.

#!/bin/sh
echo "method 1"
scp -prq server1:dir1/* server2:dir2/ >/dev/null  2>&1

if [ "$?" -ne "0" ]; then
        echo "failed ... trying method 2"
        scp -prq server1:dir1 server2:dir2
fi

exit

여전히 단일 명령으로 또는 가능하다면이를 수행하는 방법을 잘 모릅니다.

@mindthemonkey를 건배, 때로는 새로운 관점을 얻는 것이 길을 가리킬 수 있습니다.



답변

이 “점”구문을 사용하십시오.

scp -prq server1:dir1/. server2:dir2/

디렉토리 자체가 아닌 해당 디렉토리의 내용이 복사됩니다. 그리고 나는 그것이 *글러브 보다 휴대하기 쉽다고 생각합니다 .


답변

일반적으로 디렉토리 생성을 제어하려면 /완전한 경로를 암시 하는 후행을 사용해야 하지만 디렉토리가 존재하지 않으면 디렉토리를 만들 수 없습니다.

scp -prq server1:dir1/* server2:dir2/

이것은 또한 숨겨진 것을 놓칠 수 있습니다. * glob 확장으로 인한 파일 (어떤 까다로운 쉘 작업 없이 )

ssh및로 다르게 접근 할 수 있습니다 tar.

ssh server1 "cd dir1 && tar -cf - ." | ssh server2 "( mkdir -p dir2; cd dir2 && tar -xf - )"

그러나 이는 트래픽이 로컬 컴퓨터를 통과한다는 것을 의미합니다.


답변