다른 이름을 가진 새 디렉토리로 디렉토리를 재 동기화하는 방법은 무엇입니까?


48

데이터 전송을하고 있는데, 이전 파일 시스템은 현재 다른 경로에있는 디렉토리에 깊이 의존합니다. 이것은 코드를 온라인으로 저장하는 git 디렉토리입니다. 이동하거나 이름을 바꿀 권한이 없습니다.

그래서 내가 할 수있는 일은이 디렉토리를 동일한 이전 경로로 rsync하는 것입니다. 그러나 디렉토리 이름도 변경되었습니다.

디렉토리를 다른 이름으로 대상 디렉토리에 재 동기화하는 쉬운 방법이 있습니까?

답변:


82

디렉토리를 디렉토리의 정확한 사본으로 rsync재귀 적 으로 사용 하려면 dest다음을 수행하십시오 src.

rsync -a src/ dest

rsync이 어떻게 작동 매뉴얼 페이지 설명 :

소스에서 후행 슬래시는 [...] 대상에서 추가 디렉토리 레벨을 작성하지 않도록합니다. /"이름으로 디렉토리 복사"[...]와 반대로 소스 에서 후행 을 "이 디렉토리의 내용 복사"를 의미하는 것으로 생각할 수 있습니다 .


3
그러면 src디렉토리 아래에 dest디렉토리 가 생성됩니다
Zen

7
@Zen, rsync내가 사용한 버전은 없습니다 . 이것이 실제로 발생하는 경우 소스 디렉토리 인수 끝에 슬래시가 없습니다.
Adrian

3
그 비열한 후행 슬래시는 열쇠입니다 ...
tutuca

dest안타깝게도이 기능이 작동하지 않는 것 같습니다 . src대신 복사가 src됩니다 src/src. macOS에서 테스트되었습니다. 내가 대체 할 수있을 것으로 기대했다 bar -> foo/과 함께 bar/,하지만 중간 임시 디렉토리를 사용했다.
user5359531 3

@ user5359531 당신이 알고있는 경우 dest에 심볼릭 링크 src, 단순히 rm dest위의 명령을 실행하기 전에. 의 내용을 복사하기 전에 rsync만들 수있을만큼 똑똑 합니다. 중간 임시 디렉토리가 필요하지 않습니다. destsrc
Adrian

1

이전 파일 시스템과 새 파일 시스템이 모두 시스템에 액세스 가능한 경우 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에 넣은 모든 것은 데이터를 복제하지 않고 지속적으로 동기화하지 않고도 이전 방식으로 즉시 사용할 수 있습니다.


1
rm -rf old_git 명령에주의하십시오. 그러면 전체 old_git 저장소가 제거됩니다. 내가 당신의 문제를 올바르게 이해하지 못하면, 이것은 나쁜 일이 될 수 있습니다.
jrel

0

대체 솔루션을 찾으십시오.

를 사용하면 rysnc -r /origin/* /target/모든 내용을 원본 디렉토리에서 대상 디렉토리로 동기화 할 수 있습니다.


8
나는 이것이 별표와 일치하지 않기 때문에 이것이 도트 (.foo) 파일을 포함하지 않는다고 생각합니다
Ray Burgemeestre

쉘 글로브 확장에 의존하며 기술적으로 rsync에 대한 인수로 찾은 모든 파일을 전달합니다. 실행과 거의 같습니다 rsync -r $(find /origin -maxdepth 1 -type f) /target/ . @RayBurgemeestre가 지적했듯이 셸 글로브 확장에는 도트 파일이 포함되지 않습니다.
Florian Castellane
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.