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


26

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 액세스 권한이 있지만 ssh는 없습니까?
Matt

맞습니다
Giles

유일한 문제는 모든 실패에 대해 두 번째 사본을 시도한다는 것입니다. 반드시 dir2가 아닌 것은 아닙니다. 어쩌면 거의 아무것도하지 않는 테스트 (예 : 빈 디렉토리 복사)를 생각해 낼 수 있습니다. 그런 다음 출력을 기반으로 scp1 또는 scp2를 실행합니다.
Matt

좋은 점, 나는 무언가를 생각해 내면 앞으로 나아가고 다시 게시 할 것을 명심합니다.
Giles

당신은 FTP를 할 수 있습니까? 그런 다음의 출력을 확인하십시오 cd dir2.
Matt

답변:


34

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

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

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


2
-p ⇒ "원래 파일의 수정 시간, 액세스 시간 및 모드를 유지합니다." -r ⇒ "전체 디렉토리를 재귀 적으로 복사하십시오." -q ⇒ "진행률 표시기를 비활성화합니다." 출처 : computerhope.com/unix/scp.htm
kr85

1
이것은 나에게 오류를 준다 :scp: error: unexpected filename: .
Andrew Koster

1

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

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

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

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

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

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


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

@ 길이 작동한다고 말하는가?
Matt

1
홀수, 나는 그것을 편집했지만 그것을 잃어 버렸습니다. 아니, dir이 존재하지 않으면 scp는 오류를줍니다. 또한이 특별한 경우에는 ssh를 사용할 수 없습니다 (사용자 권한이있는 문제). 이것은 스크립트 에서이 작업을 수행함에 따라 위의 내용을 시도하고 오류를 캡처하고 오류가 발생하면 첫 번째 게시물의 기본 버전을 시도해 볼 수 있습니다. @mindthemonkey의 도움에 감사드립니다
Giles

1
대상 디렉토리가 존재하지 않으면 '디렉토리입니다'라는 오류가 발생합니다.
Matt

1
예, 나도 디렉토리가 존재하지 않으면 이상한 오류가 발생합니다.
Giles
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.