mpd 재생 목록은 다음과 같습니다.
파일 동기화.m3u
Bob Dylan - The Times They Are A-Changin' [V0]/04. One Too Many Mornings.mp3
Bob Dylan - The Times They Are A-Changin' [V0]/01. The Times They Are A-Changin'.mp3/
또는 전체 경로를 저장하도록 구성할 수 있습니다.
동기화 완료.m3u
/home/share/media/audio/Bob Dylan - The Times They Are A-Changin' [V0]/01. The Times They Are A-Changin'.mp3
/home/share/media/audio/Bob Dylan - The Times They Are A-Changin' [V0]/03. With God On Our Side.mp3
rsync
이 파일을 /media/sdg/MUSIC에 저장하고 싶습니다 . 재생 목록에서 파일이 삭제되면 대상 위치에서 파일을 삭제하고 싶습니다.
나는 그 주문을 정확하게 이해할 수 없었다. 어젯밤에 작동했다고 생각했는데 다시 실행해 보니 작동하지 않습니다. 제가 include-from
생각할 수 있는 모든 조합을 시도해 보았습니다 .exclude=*
답변1
기본적인 접근 방식은 다음과 같습니다(참조:이 rsync 필터 가이드더 많은 정보를 알고 싶다면):
- 재생 목록에 파일을 포함합니다.
- 모든 디렉터리를 포함하고(그렇지 않으면 아무 것도 복사되지 않음) 다른 모든 디렉터리는 제외됩니다.
- 동기화되지 않은 파일 및 빈 디렉터리 삭제
따라서 (테스트되지 않음):
rsync -a --include-from=/path/to/syncrel.m3u --include='*/' --exclude='*' \
--delete --delete-excluded --prune-empty-dirs \
/home/share/media/audio/ /media/sdg/MUSIC
파일 이름에 와일드카드 문자 중 하나가 포함되어 있으면 *?[
복잡해집니다 . 이러한 문자 앞에는 백슬래시를 추가해야 합니다. 파일 이름에 백슬래시도 있으면 앞에 백슬래시가 와야 하지만 다른 와일드카드가 있는 경우에만 가능합니다. 다음은 파일 이름 목록을 예상 형식으로 변환하는 sed 조각입니다(파일 이름에 백슬래시가 없으면 첫 번째 표현식만 필요합니다).
sed -e 's/[*?\[]/\\&/g' -e 's/[*?[]/&/' -e T -e 's/\\\\/\\/g'
bash, ksh 또는 zsh에는 파일 목록을 rsync에 전달하기 전에 필터링하는 편리한 방법이 있습니다.
rsync -a --include-from=<(</path/to/syncrel.m3u sed -e 's/[*?\[]/\\&/g') \
--include='*/' --exclude='*' \
--delete --delete-excluded --prune-empty-dirs \
/home/share/media/audio/ /media/sdg/MUSIC