두 디렉토리 구조를 비교하고 대상 위치에서 불필요한 파일과 디렉토리를 삭제하는 가장 좋은 방법은 무엇입니까?
개발중인 작은 웹 포토 갤러리 앱이 있습니다. 사용자는 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).