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 - )"
그러나 이는 트래픽이 로컬 컴퓨터를 통과한다는 것을 의미합니다.