"파일 -에서 -"목록에서 Rsync뿐만 아니라 대상에 관계없는 파일을 삭제


0

rsync를 사용하여 텍스트 파일의 음악이 담긴 mp3 플레이어를로드하고 있으므로 "파일에서"목록에 포함되지 않은 불필요한 파일을 삭제하고 싶습니다. (내가 음악 플레이어에서 특정 노래를 더 이상 원하지 않고 재생 목록에서 제거하지 않는다고 말하십시오.)

그러나 삭제 옵션 중 하나만 사용하면 작동하지 않는 것처럼 보입니다 (--delete, --delete-during 등). 나는 그 밖의 모든 것을 제외 시키려고합니다 (--exclude = "*. *")하지만 역시 그렇게하지 않았습니다. 대상에서 불필요한 파일을 제거하십시오. 현재 사용중인 명령이 있습니다.

rsync -vi --ignore-existing --files-from="~/include.txt" ~ ~/TestFolder/

처음에는 일반적인 rsync 옵션 (-aR 등)을 모두 사용했지만 파일에서 동기화 할 때 아무 것도하지 않는 것 같습니다 (목록에서 삭제). 그리고 난 그냥 자세한 내용을 테스트 목적으로 항목을 변경하고 그래서 무슨 일인지 볼 수 있습니다. - r을 --delete와 함께 추가하려고 시도했으나 작동하지 않습니다. 나는 또한 시도했다 (--delete-excluded --exclude = "*. *").

어떤 제안?

나는 삭제할 파일 목록을 생성하여 특별히 삭제할 수 있다고 생각하지만 ... rsync가해야 할 일이 아닌가?

답변:


0

좀 더 검색 한 후, 나는 rsync에서 (적어도 내 Mac에 설치된 rsync에서)이 작업을 수행 할 수 없다는 것을 알았습니다.

그러나 필자는 본질적으로이를 수행 할 스크립트를 찾았습니다. 당신은 길을 돌아 다니며 돌아 다니는 것이 좋겠지 만, 효과가 있습니다.

에 사용자 "cpbills"에서 https://stackoverflow.com/questions/1813907/rsync-delete-files-from-list-dest-does-not-delete-unwanted-files

#!/bin/bash                                                                 

playlist_path="/home/cpbills/.config/mpd/playlists"
playlist="${playlist_path}/${1}.m3u"
music_src="/home/cpbills/files/music"
music_dst="/mnt/sdcard/music/"

if [[ -e "$playlist" ]]; then
  # Remove old files
  find "$music_dst" -type f | while read file; do
    name="$(echo "$file" | sed -e "s!^$music_dst!!")"
    if ! grep -qF "$name" "$playlist"; then
      rm "$file"
    fi
  done

  # Remove empty directories
  find "$music_dst" -type d -exec rmdir {} \; 2>/dev/null

  rsync -vu \
      --inplace \
      --files-from="$playlist" \
      "$music_src" "$music_dst"
else
  printf "%s does not exist\n" "$playlist" 1>&2
  exit 1
fi

개인적으로 위의 스크립트 에서처럼 빈 디렉토리의 한 레이어 만 제거하기 때문에 "빈 디렉토리 제거"행을 두 배로 늘 렸습니다. 따라서 / Folder1 / Folder2 / Folder3을 가지고 있고 명령을 실행하면 / Folder1 / Folder2 /가 생깁니다. 두 번 실행하면 / Folder1 /

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.