Rsync: src 파일을 심볼릭 링크로 전송하고 나머지 dir 구조를 복사하는 것이 가능합니까?

Rsync: src 파일을 심볼릭 링크로 전송하고 나머지 dir 구조를 복사하는 것이 가능합니까?

src 디렉토리를 템플릿으로 복사하고 싶습니다. 즉, 동일한 구조를 유지하고 싶습니다. 이 템플릿 디렉터리의 파일은 src 디렉터리를 기호 링크로 가리켜야 합니다. rsync가 기본적으로 작동하는지 잘 모르겠습니다.

답변1

Rsync는 심볼릭 링크가 아닌 복사 또는 (때때로) 하드 링크만 수행할 수 있습니다. GNU coreutils의 프로그램은 cp적어도 파일 이름 기반 필터링과 같은 멋진 rsync 옵션이 필요하지 않은 경우 원하는 것을 수행할 수 있습니다. -s플래그와 재귀를 사용하십시오 -a.

cp -as source target

필터링이 필요한 경우 다음을 사용할 수 있습니다.다루기 힘든~의zmv. 이 zmv함수는 기본적으로 파일을 이동하지만 다른 작업을 지정할 수 있습니다 -S(심볼릭 링크를 생성하지만 디렉토리를 복사하지 않으므로 사용 사례에 좋지 않습니다). 또는 -p(임의의 프로그램을 지정합니다. 여기서는 함수를 사용하여 무엇이든 생성합니다. 필요한 디렉토리를 선택한 다음 심볼릭 링크를 만듭니다). 다음을 지정할 수 있습니다.무늬^*.dontcopy복사할 파일을 제한합니다. 여기서는 확장자가 있는 파일을 무시 .dontcopy하고 (m-7)지난 7일 이내에 수정된 파일만 처리하고 ^/처리할 파일 목록의 디렉터리를 무시하는 데 사용하고 있습니다 .

mkdir_ln () {
  mkdir -p -- $2:t &&
  ln -s -- $1:A $2
}
cd source
zmv -P mkdir_ln -Q '**/^*.dontcopy(m-7^/)' '../target/$f'

위에서 나는 사용하고 있습니다기록 수정자 (:A)첫 번째 인수를 절대 경로로 변환합니다. 상대 심볼릭 링크를 생성하려면 ../올바른 수의 구성 요소를 사용하여 올바른 대상 경로를 구축해야 합니다.

mkdir_ln () {
  mkdir -p -- $2:t &&
  ln -s -- ${1//[^/]##/..}/$1 $2
}

관련 정보