Rsync: 여러 파일과 디렉터리를 빠르게 제외할 수 있는 방법이 있습니까?

Rsync: 여러 파일과 디렉터리를 빠르게 제외할 수 있는 방법이 있습니까?

rsync를 사용하여 여러 파일과 디렉터리를 빠르게 제외하는 방법이 있습니까?

아래는 내 코드입니다.

rsync -avzh . blabla@blabla:~/ --exclude=__pycache__ --exclude=checkpoints --exclude=logs --exclude=.git --exclude=plot

각 파일(디렉토리)마다 명시적으로 선언해야 합니다. 너무 긴 것 같아

답변1

rsync문서 (참고자료 참조 man rsync) --exclude-from에는 파일에서 제외 목록을 지정할 수 있는 매개변수가 있습니다.

/제외 예시 세트와 관련하여 디렉토리 뒤에는 지정되지 않은 파일이나 디렉토리가 아닌 디렉토리임을 표시 해야 하며 , 홈 디렉토리 자체에 있는 디렉토리는 /다른 디렉토리와 동일하지 않도록 접두사를 붙여야 합니다. 일치하지 않습니다.

제외 파일에서는 다음과 같이 나열될 수 있습니다.

# Directories found anywhere
__pycache__/
checkpoints/
logs/
plot/

# Directories found only in HOME
/.git/

답변2

을 사용하는 경우 bash다음을 사용할 수 있습니다.버팀대 확장--exclude=xxx여러 옵션 으로 확장됩니다 .

rsync -avzh --exclude={__pycache__,checkpoints,logs,.git,plot} . blabla@blabla:~/ 

답변3

제외하려는 모든 가능한 디렉터리/파일과 일치하는 패턴을 공식화할 수 없는 한, 제가 생각할 수 있는 유일한 다른 방법은 --exclude-from=filename.

패턴을 배열( , 또는 등 zsh이 기능을 지원하는 셸 )에 저장할 수도 있습니다. 이는 스크립트를 작성할 때 유용할 수 있습니다.bashkshyash

exclude=( __pycache__ checkpoints logs .git plot )

for pattern in "${exclude[@]}"; do
    exclude=( "${exclude[@]:1}" --exclude="$pattern" )
done

rsync --archive --verbose --compress --human-readable \
    "${exclude[@]}" \
    . blabla@blabla:

또는 위치 인수를 사용하십시오(타이핑이 적고 모든 POSIX 셸에 이식 가능).

set -- __pycache__ checkpoints logs .git plot

for pattern do
    set -- "$@" --exclude="$pattern"
    shift
done

rsync --archive --verbose --compress --human-readable \
    "$@" \
    . blabla@blabla:

관련 정보