rsync를 사용하여 가리키는 심볼릭 링크 AND


11

에 의해 수행 될 필요는 없지만이 작업을 수행 rsync하기 위해 스크립트를 작성할 필요가 없으며 rsync내가 원하는 것에 매우 가깝습니다.

rsync -a(또는 -l)는 심볼릭 링크를 보존 할 수 있으며 심볼릭 링크 -L를 역 참조하여 일반적인 파일 / 디렉토리처럼 복사 할 수 있습니다. 그러나 심볼릭 링크를 유지하고 링크가 가리키는 파일 / 디렉토리를 복사 할 수 있습니까?

다음은 예입니다. 이 폴더 계층 구조가 있다고 가정 해보십시오.

dirA/link_to_file -> ../dirB/file
dirA/link_to_dir -> ../dirC
dirB/file
dirB/not_this_file
dirC/file
dirC/file2
dirD/others

그리고 내가 할 때 rsync -aR dirA dest(또는 다른 것), 나는 이것들이 정확하게 나타나기를 원합니다 dest:

dirA/link_to_file -> ../dirB/file
dirA/link_to_dir -> ../dirC
dirB/file
dirC/file
dirC/file2

이 가능 rsync합니까? 감사합니다.

절대 경로가 있거나 소스 디렉토리 외부를 가리키는 심볼릭 링크를 무시할 수 있다고 가정합니다.


1
나는 당신의 요청이 underspecified 생각 : 당신이 경우에 할 것을 요구 dirA/link에 심볼릭 링크 ../dirB/file, 다음이 복사로 처리되어야 dirB/filedest/dirB/filedirA/linkdest/dirA/link. dirA/link링크가 있다면 ../../another_file어떨까요? 일반적으로 dirA/link디렉토리 트리에서 상위 디렉토리를 가리키는 경우 어떻게됩니까 ?
Riccardo Murri

잘 잡았습니다. 내 유스 케이스에서는 트리 외부를 가리키는 링크 포인트가 없으며 링크에 절대 경로가 없습니다.
Wei-Yin

1
내가 그것에 대해 더 많이 생각할수록, 표준 유틸리티가 이것을하지 않을 것이라고 생각합니다. 일반적인 경우에, 당신이 그 대상 (심볼릭 링크가 포함 된 심볼릭 링크에 심볼릭 링크 또는보다 일반적으로 심볼릭 링크가있는 경우, 단일 소스 주어진 목적지의 큰 숫자를 생성해야 할 수도 있습니다 예를 들어 a -> b, b -> c/foo, c -> d/e: 복사에 대한 요청 a도 복사해야합니다 b, c, c/foo, d, d/ed/e/foo).
Gilles 'SO- 악마 그만

@Gilles : 그렇습니다. 링크를 추적하면 여전히 소스 디렉토리에있는 한 많은 파일을 포함시킬 수 있습니다.
Wei-Yin

답변:


2

심볼릭 링크 이름을 알고 링크대상 을 전송하려는 경우 다음을 수행 할 수 있습니다.

rsync -a 'symlink' .
realdir="$(basename "$(readlink -f 'symlink')")"
rsync -a "$realdir" .

첫 번째 rsyncsymlink. 두 번째 명령은 실제 ​​디렉토리 이름을 찾고 두 번째 명령은 rsync디렉토리 내용을 전송합니다.


0

이것들이 모두 'mydir'에 있고 한 곳에서 다른 곳으로 'mydir'을 rsync 해야하는 경우에만 가능합니다. Rsync는 사용자가 제공 한 경로 외부를 복사 할 수 없습니다 (다음 링크 제외). 예 :

mydir/dirA ...
mydir/dirB ...
...

예,이 가정은 사용 사례에 맞습니다. 모든 링크는 mydir 안에 있습니다.
Wei-Yin

@ Wei-Yin은 단순히 심볼릭 링크를 따르지 말라고 ... 또는 내가 뭔가 잘못 이해했는지
xenoterracide

@ xenoterracide : rsync를 어떻게 호출하든간에 각 소스에 대한 단일 대상을 만들 것이라고 생각합니다 (리딩 디렉토리 생성 제외). 그러나 Wei-Yin은 둘 이상의 대상 (링크 대상)을 만들려고 합니다.
질 'SO-정지 존재 악마'

분명히 나는 ​​혼란스러워 ...
xenoterracide

@Gilles : rsync가 심볼릭 링크를 따를 필요가 없습니다 . 어쨌든 대상을 동기화합니다 . 따라서 먼저 심볼릭 링크를 복사하여 매달려있는 심볼릭 링크를 만듭니다. 그런 다음 심볼릭 링크의 대상을 포함하여 디렉토리의 다른 모든 것을 복사합니다. Voila, 모든 것이 잘 어울립니다.
Martin v. Löwis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.