한 위치에서 다른 위치로 디렉토리 구조를 복사해야 합니다. 폴더를 복사하고 파일을 제외하면 됩니다.
내가 입력하는 동안
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
--from0
rsync