Rsync에는 폴더와 링크가 포함되지만 파일은 제외됩니다.

Rsync에는 폴더와 링크가 포함되지만 파일은 제외됩니다.

한 위치에서 다른 위치로 디렉토리 구조를 복사해야 합니다. 폴더를 복사하고 파일을 제외하면 됩니다.

가장 큰 문제는 폴더를 연결했다는 것입니다! 여기에 이미지 설명을 입력하세요.

내가 입력하는 동안

rsync -avz -H  /tmp/test/ /tmp/copy/

폴더와 링크된 폴더를 올바르게 복사하고 파일도 복사합니다.

내가 입력하는 동안

rsync -avz -H -f"+ */" -f"- *" /tmp/test/ /tmp/copy/

여기에는 모든 폴더가 포함되고 파일은 제외되지만 링크된 폴더도 제외됩니다.

내가 입력하는 동안

rsync -avz -H -f"+ */" -f"- *.txt" /tmp/test/ /tmp/copy/

폴더와 연결된 폴더를 올바르게 생성하지만 txt 파일만 제외합니다.

내가 입력하는 동안

rsync -vzrptgoD -L -H -f"+ */" -f"- *" /tmp/test/ /tmp/copy/

파일은 제외하지만 연결된 폴더를 실제 폴더로 변환하고 경로만 연결합니다.

파일 형식이 많아서 -f"- *.txt"처럼 추가할 수 없습니다.

어떻게 해야 합니까? -f"+ */"에 연결된 폴더 구문을 추가할 수 있나요?

그렇지 않다면 다른 옵션이 있습니까?

답변1

rsync필터링 규칙은 디렉토리만 "다른 모든 것"과 구별하므로 에서는 이 작업을 직접 수행할 수 없습니다 .

그러나 find필요한 항목( l심볼릭 링크, d디렉터리)을 선택하는 명령을 구성한 다음 해당 목록을 rsync복사 에 전달할 수 있습니다.

find src/ \( -type l -o -type d \) -printf "%P\0" |
    rsync --files-from - --from0 -av src/ dst/

상상하다

mkdir /tmp/608951
cd /tmp/608951
mkdir -p src/{test1,test2} dst; ln -s test1 test/link

데모, 디렉토리 및 심볼릭 링크 src복사dst

find src/ \( -type l -o -type d \) -printf "%P\0" | rsync --files-from - --from0 -av src/ dst/

산출

building file list ... done
link -> test1
test1/
test2/

sent 134 bytes  received 25 bytes  318.00 bytes/sec
total size is 5  speedup is 0.03

증거, 사용법 ls -R src dst, 쇼 dst에는 디렉토리와 심볼릭 링크만 포함되어 있지만 src파일도 포함되어 있습니다.

dst:
link  test1  test2

dst/test1:

dst/test2:

src:
link  test1  test2

src/test1:
file1

src/test2:
file2

GNU가 없으면 일반으로 find변경 하고 에서 변경하십시오 . 단점은 이름에 이상한 문자(예: 개행 문자)가 포함된 파일을 복사할 수 없다는 것입니다.-printf "%P\n"-print--from0rsync

관련 정보