선택한 하위 디렉터리만 rsync

선택한 하위 디렉터리만 rsync

내 음악 라이브러리의 일부를 외부 드라이브에서 내 오디오 플레이어로 동기화하고 싶습니다.

일반적으로 예를 들면 다음과 같습니다.$소스그리고$target디렉터리 및 텍스트 파일$하위디렉토리다음과 관련된 하위 디렉터리 경로 목록을 포함합니다.$소스구체적으로 rsync를 (--삭제)하고 싶습니다.$target디렉토리 트리 구조(--relative)를 유지합니다.

내 코드는 my_sync.sh다음과 같습니다

rsync -rR --include-from=$subdirs --exclude="/*" --delete --delete-excluded $source/./ $target

그러나 문제는 이것이 바로 아래 하위 디렉터리에서만 작동한다는 것입니다.$소스(/dir/*.mp3), 중첩된 하위 디렉터리(예: /dir1/dir2/...)는 생략됩니다.

답변1

나는 다음과 같은 해결책을 생각해 냈습니다.

# exclude system created files like .DS_Store, desktop.ini...
arg="-C
"

# project each "$path" to "/$path/**" and concat 'em all
while read line || [[ -n $line ]]; do
    arg+="+ /$line/**
"
done < $subdirs

# */ - includes each folder so that rsync traverses the whole tree,
# *  - excludes everything else
arg+="+ */
- *"

# -m - excludes "empty" dirs that we used to traverse the tree
echo "$arg" | rsync -rmhvn -f ". -" --delete-excluded --info=PROGRESS2 --size-only $source/./ "$target"

관련 정보