rsync를 사용하여 외부 파일 만 삭제


13

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

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

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

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

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

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

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

답변:


8

나는 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.


고마워 톰 또한 디렉토리를 정리하려면 두 번째로 실행해야하지만 파일 대신 명령에서 디렉토리를 지정하고 에코를 rmdir?로 대체해야합니다 .
Bryan

@Bryan : 네, 합리적으로 들립니다. find[테스트 에서 플래그를 변경해야합니다 ]. 물론, 내가 준 명령과 수정 사항에 매우주의하고 철저히 테스트하십시오 echo!
Tom Shaw

감사합니다. 테스트하는 동안 많은 양의 에코를 적용하겠습니다.
Bryan

1
"ls"로 테스트하여 공백과 잘 작동하는지 확인할 수 있습니다. 최고의 소원.
Tom Shaw

34

당신 --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).

1
전혀 오류가 없으면 멋진 답변이 작동하지 않습니다. 따라서 --ignore-errors인수도 추가해야합니다 . 그것이 나를 위해 일한 유일한 것입니다. 주셔서 감사 --existing하고 --ignore-existing! 나는 당신의 대답을 나의 대답의 기초로 여기에서 사용했습니다 .
LonnieBest

1
오류가 아니라도이있는 경우 @LonnieBest rm, cp또는 mv오류가 무엇인지 그의로 작동합니다 : 그들은 보았다되어야하며 성공적으로 완료에서 작업을 방지하는 문제가 있습니다. 당신은 오류를 무시하는 대부분의 도구를 지시 할 수 있습니다 (예를 들어 -f에 대한 rm)하지만이 질문이나이 답변 관련이 어떻게 표시되지 않습니다.
Mecki
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.