Usando o rsync para excluir apenas arquivos estranhos

11

Qual é a melhor maneira de comparar duas estruturas de diretório e excluir arquivos e diretórios estranhos no local de destino?

Eu tenho um pequeno aplicativo de galeria de fotos na web que estou desenvolvendo. Usuários adicionam & remova imagens usando o FTP. O software de galeria da Web que escrevi cria novas miniaturas instantaneamente, mas não lida com exclusões. O que eu gostaria de fazer, é agendar um script de comando / bash para cuidar disso em intervalos predefinidos.

As imagens originais são armazenadas em /home/gallery/images/ e organizadas em álbuns, usando subdiretórios. As miniaturas são armazenadas em cache em /home/gallery/thumbs/ , usando a mesma estrutura de diretórios e nomes de arquivos que o diretório de imagens.

Eu tentei usar o seguinte para conseguir isso:

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

que funcionaria bem se todas as miniaturas já tivessem sido armazenadas em cache, mas não há garantia de que esse seria o caso, quando isso acontece, o diretório thumb possui imagens em tamanho original copiadas para ele.

Como posso conseguir melhor o que estou tentando fazer?

    
por Bryan 31.05.2011 / 14:01

2 respostas

8

Eu não acho que rsync é a melhor abordagem para isso. Eu usaria um one-liner bash como o seguinte:

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

Se este one-liner produzir a lista correta de arquivos, você poderá modificá-lo para executar um comando rm em vez de um comando echo .

    
por 31.05.2011 / 14:16
22

Você precisa de --existing também:

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

Na página de manual:

  --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).
    
por 12.08.2015 / 12:06