it-swarm-pt.tech

Excluir arquivos estranhos do diretório dir via rsync?

Diga que eu tenho

SRC 
  001.jpg
  002.jpg
  001.txt
  a.Zip

DEST
  hello.jpg

rsync -d --delete SRC:{*.jpg,*.txt} DEST

Não remove hello.jpg do DEST, tem alguma idéia de como arquivar isso?

51
Cheng

A razão pela qual seu comando não está funcionando é explicada pela página de manual do rsync (ênfase adicionada):

--excluir

Isso diz ao rsync para excluir arquivos estranhos do lado de recebimento (aqueles que não estão no lado de envio), mas apenas para os diretórios que estão sendo sincronizados. Você deve ter solicitado ao rsync para enviar o diretório inteiro (por exemplo, "dir" ou "dir /") sem usar um curinga para o conteúdo do diretório (por exemplo, "dir/*"), pois o curinga é expandido pelo Shell e o rsync recebe uma solicitação para transferir arquivos individuais, não o diretório pai dos arquivos. Os arquivos excluídos da transferência também são excluídos da exclusão, a menos que você use o - opção excluir-excluída ou marcar as regras como correspondendo apenas no lado de envio (consulte os modificadores de inclusão/exclusão na seção REGRAS DO FILTRO).

Assim, quando você executa

$ rsync -d --delete SRC:{*.jpg,*.txt} DEST

os arquivos indesejados no DEST não estão sendo excluídos porque você realmente não solicitou a sincronização de um diretório, mas apenas alguns arquivos específicos. Para obter os resultados desejados, tente algo como isto:

rsync -d --delete-excluded --include '*.jpg' --include '*.txt' --exclude '*' SRC/ DEST/

Observe que a ordem das diretivas de inclusão e exclusão é importante. Essencialmente, cada arquivo é verificado nos padrões de inclusão ou exclusão na ordem em que aparecem. Portanto, os arquivos com extensões .jpg ou .txt são sincronizados, pois correspondem aos padrões "incluídos" antes de corresponderem ao padrão "*" excluído. Todo o resto é excluído pelo --exclude '*' padronizar. O --delete-excluded opção garante que mesmo os arquivos excluídos no lado DEST sejam excluídos.

73
Steven D