답변:
디렉토리를 디렉토리의 정확한 사본으로 rsync
재귀 적 으로 사용 하려면 dest
다음을 수행하십시오 src
.
rsync -a src/ dest
rsync
이 어떻게 작동 매뉴얼 페이지 설명 :
소스에서 후행 슬래시는 [...] 대상에서 추가 디렉토리 레벨을 작성하지 않도록합니다.
/
"이름으로 디렉토리 복사"[...]와 반대로 소스 에서 후행 을 "이 디렉토리의 내용 복사"를 의미하는 것으로 생각할 수 있습니다 .
rsync
내가 사용한 버전은 없습니다 . 이것이 실제로 발생하는 경우 소스 디렉토리 인수 끝에 슬래시가 없습니다.
dest
안타깝게도이 기능이 작동하지 않는 것 같습니다 . src
대신 복사가 src
됩니다 src/src
. macOS에서 테스트되었습니다. 내가 대체 할 수있을 것으로 기대했다 bar -> foo/
과 함께 bar/
,하지만 중간 임시 디렉토리를 사용했다.
dest
에 심볼릭 링크 src
, 단순히 rm dest
위의 명령을 실행하기 전에. 의 내용을 복사하기 전에 rsync
만들 수있을만큼 똑똑 합니다. 중간 임시 디렉토리가 필요하지 않습니다. dest
src
이전 파일 시스템과 새 파일 시스템이 모두 시스템에 액세스 가능한 경우 rsync 대신 기호 링크를 사용하십시오. 사용중인 rsync 명령이 호스트를 지정하지 않거나 동일한 호스트 인 경우에 해당됩니다. 동일한 호스트에서 다른 이름을 가진 두 개의 디렉토리를 미러링하려고합니다. 데이터를 복제하고 있기 때문에 rsync를 사용하지 마십시오. 동기화를 유지하려면 rsync를 자주 실행해야합니다.
심볼릭 링크를 사용하면 이름이 다른 두 디렉토리를 미러링하고 공간이 거의 필요하지 않은 일회성 수정입니다. 다른 디렉토리를 가리키는 별칭 디렉토리를 만드는 것과 같습니다.
/ old / path / old_git 디렉토리에 이전 자식이 있고 코드 저장소가 / new / path / new_git으로 이동했다고 가정 해 봅시다.
넌 할 수있어:
cd /old/path
rm -rf old_git (if you still have it there, get rid of it, or move it out of the way)
ln -s /new/path/new_git old_git
다음과 같은 링크가 생성됩니다.
/ old / path / old_git-> / new / path / new_git
따라서 new_git에 넣은 모든 것은 데이터를 복제하지 않고 지속적으로 동기화하지 않고도 이전 방식으로 즉시 사용할 수 있습니다.
대체 솔루션을 찾으십시오.
를 사용하면 rysnc -r /origin/* /target/
모든 내용을 원본 디렉토리에서 대상 디렉토리로 동기화 할 수 있습니다.
rsync -r $(find /origin -maxdepth 1 -type f) /target/
. @RayBurgemeestre가 지적했듯이 셸 글로브 확장에는 도트 파일이 포함되지 않습니다.
src
디렉토리 아래에dest
디렉토리 가 생성됩니다