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
이 기능을 지원하는 셸 )에 저장할 수도 있습니다. 이는 스크립트를 작성할 때 유용할 수 있습니다.bash
ksh
yash
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: