Linux의 명령줄에서 해당 폴더에 아직 존재하지 않는 다른 서버의 원격 폴더로 파일만 복사하는 방법은 무엇입니까?

Linux의 명령줄에서 해당 폴더에 아직 존재하지 않는 다른 서버의 원격 폴더로 파일만 복사하는 방법은 무엇입니까?

두 개의 서로 다른 서버에 두 개의 폴더가 있습니다.

A와 B 간에 파일을 동기화하고 싶지만, 파일 크기가 크기 때문에 B 폴더에 아직 존재하지 않는 파일만 복사하고 싶습니다. 파일 업데이트에는 관심이 없습니다. B 폴더에 있는 모든 파일의 복사본을 원합니다.

Linux에서 이 작업을 어떻게 수행합니까? (변경된 파일을 업데이트하는 방법을 알고 싶습니다.)

답변1

rsync가 이를 수행할 수 있습니다.

rsync --ignore-existing <src> <dest>

다양한 업데이트를 수행할 수도 있습니다. 맨페이지를 확인해 보세요.

답변2

를 사용 rsync하고 --ignore-existing기존 파일을 업데이트하지 않을지 여부를 지정합니다.

rsync -e ssh -av --ignore-existing /my/source/directory [email protected]:/data/

제가 일반적으로 추가하는 인기 있는 추가 옵션은 --progress무슨 일이 일어나고 있는지 알려주는 것입니다. 휴식을 기대한다면 그것도 괜찮지만 --partial, 전송 중에 끊어지면 "부분"과 "기존 무시"가 어떻게 혼합되는지 잘 모르겠습니다.

답변3

이것은거의 성공할 수 있는 트릭, 그러나 이 트릭은 동일한 서버의 폴더에 복사할 때만 작동합니다. 아래는 포함된 링크의 관련 내용입니다.

[jonesy@cranford testing]$ ls
bar  foo

[jonesy@cranford testing]$ ls foo
1  2  3

[jonesy@cranford testing]$ ls bar
1  2  3  4  5  6

[jonesy@cranford testing]$ yes n | cp -i bar/* foo 2>/dev/null

[jonesy@cranford testing]$ ls foo
1  2  3  4  5  6

[jonesy@cranford testing]$ ls bar
1  2  3  4  5  6

"대상 디렉터리에 이미 존재하는 파일을 덮어쓸지(또는 덮어쓰지 않을지) 묻는 "cp -i" 명령에 상수 "no"를 전달합니다. STDERR을 보낼 필요가 없습니다. to /dev/null — 이렇게 하지 않으면 최종 결과는 복사 명령이 아직 존재하지 않는 파일만 대상 디렉터리에 복사하고 두 디렉터리 모두에 있는 파일을 건너뛰는 것입니다(기술적으로는 .복사명령은 수행되지 않지만 수행하면 작업이 수행됩니다.) "

"물론, 디렉터리 내용을 강제로 덮어쓸 수 있지만 두 디렉터리에 있는 파일이 동일한지 알 수 없습니다. 또는 한 디렉터리를 옆으로 이동하고 다른 디렉터리를 제자리로 이동할 수 있지만 동일한 문제가 발생합니다."

관련 정보