rsync를 사용하여 외부 파일 만 삭제 디렉토리 구조를 비교하고 대상 위치에서 불필요한 파일과

두 디렉토리 구조를 비교하고 대상 위치에서 불필요한 파일과 디렉토리를 삭제하는 가장 좋은 방법은 무엇입니까?

개발중인 작은 웹 포토 갤러리 앱이 있습니다. 사용자는 FTP를 사용하여 이미지를 추가 및 제거합니다. 필자가 작성한 웹 갤러리 소프트웨어는 즉시 새로운 썸네일을 생성하지만 삭제는 처리하지 않습니다. 내가하고 싶은 것은 미리 정의 된 간격으로이를 처리하기 위해 명령 / bash 스크립트를 예약하는 것입니다.

원본 이미지는 /home/gallery/images/하위 디렉토리를 사용하여 앨범에 저장 되고 앨범으로 구성됩니다. 썸네일은 /home/gallery/thumbs/이미지 디렉토리와 동일한 디렉토리 구조 및 파일 이름을 사용하여에 캐시됩니다 .

나는 이것을 달성하기 위해 다음을 사용하려고 시도했다.

rsync  -r --delete --ignore-existing /home/gallery/images /home/gallery/thumbs

모든 썸네일이 이미 캐시되어 있으면 제대로 작동하지만, 이런 경우에는 썸 디렉토리에 원래의 전체 크기 이미지가 복사되어 있다고 보장 할 수 없습니다.

내가하려는 일을 어떻게 가장 잘 달성 할 수 있습니까?



답변

나는 rsync이것이 최선의 방법 이라고 생각하지 않습니다 . 다음과 같이 bash one-liner를 사용합니다.

$ cd /home/gallery/thumbs && find . -type f | while read file;do if [ ! -f "../images/$file" ];then echo "$file";fi;done

이 단일 라이너가 올바른 파일 목록을 생성하는 경우 rm명령 대신 명령 을 실행하도록 파일을 수정할 수 있습니다 echo.


답변

당신 --existing도 역시 필요합니다 :

rsync -r --delete --existing --ignore-existing /home/gallery/images /home/gallery/thumbs

맨 페이지에서 :

  --existing, --ignore-non-existing
          This tells rsync to skip creating files (including  directories)
          that  do  not  exist  yet on the destination.  If this option is
          combined with the --ignore-existing option,  no  files  will  be
          updated  (which  can  be  useful if all you want to do is delete
          extraneous files).

답변