rsync 'não é possível excluir erros do diretório não vazio', mesmo com a opção --force

26

Ao executar este comando:

$ sudo rsync -r --delete --force --checksum --exclude=uploads /data/prep/* /data/app/

Estou recebendo a seguinte saída:

cannot delete non-empty directory: html/js/ckeditor/_source/plugins/uicolor/yui
cannot delete non-empty directory: html/js/ckeditor/_source/plugins/uicolor/yui
cannot delete non-empty directory: html/js/ckeditor/_source/plugins/uicolor
cannot delete non-empty directory: html/js/ckeditor/_source/plugins/uicolor
cannot delete non-empty directory: html/js/ckeditor/_source/plugins
cannot delete non-empty directory: html/js/ckeditor/_source/plugins
cannot delete non-empty directory: html/js/ckeditor/_source
cannot delete non-empty directory: html/js/ckeditor/_samples
cannot delete non-empty directory: html/js/ckeditor/plugins/uicolor/yui
cannot delete non-empty directory: html/js/ckeditor/plugins/uicolor/yui
cannot delete non-empty directory: html/js/ckeditor/plugins/uicolor

Ao ler o man rsync , tive a impressão de que a opção --force diria ao rsync para excluir esses diretórios não vazios, que é o resultado desejado.

Ref:

--force                 force deletion of dirs even if not empty

Como posso modificar o comando para excluir os diretórios não vazios?

Estou usando o rsync versão 3.0.8, no Gentoo Base System versão 2.0.3, caso isso seja relevante.

Atualização: Adicionada sudo ao comando para deixar claro que isso não é um problema de permissões de arquivo.

    
por tommarshall 05.02.2014 / 16:30

4 respostas

34

Você tentou adicionar --delete-excluded ?

Se você excluir um diretório em suas pastas excluídas no lado "remoto", rsync --delete não excluirá a pasta excluída em seu site "local".

    
por 18.03.2014 / 14:08
4

Aqui estão possíveis fontes para este problema:

(1) Este erro pode ser o resultado da opção -b (--backup). Esta opção criará um backup de cada arquivo excluído, anexando um til ( ~ ) em seu nome de arquivo. (Isso me confundiu, como o nome do arquivo é claramente um backup, mas o nome do diretório não é, como você não pode ver o til.)

Para verificar se este é o mesmo caso, leia seu diretório de destino no nível mais profundo e verifique se existe algum arquivo final de til (~). Note que estes nomes de arquivos anexados ao til são então invisíveis em algum sistema comum de navegação de arquivos, então você pode não vê-los.

Para resolver este caso, prefira a opção --backup-dir = DIR, por exemplo --backup-dir = .rsync_bak.

(2) A opção --exclude pode ter os mesmos resultados. O que possivelmente está acontecendo no seu caso. O sistema de padrões é poderoso, mas pode ser enganador. Por exemplo, se você escrever --exclude = '* ~', isso irá ignorar todos os arquivos finais do til, resultando exatamente como no caso (1) acima.

da página de manual do rsync:

if the pattern starts with a / then it is anchored to a particular spot in the hierarchy of files, otherwise it is matched against the end of the pathname

Si se você escrever --exclude = uploads, isso excluirá todos os arquivos chamados "updloads", em qualquer nível da sua árvore de arquivos.

Verifique se existe um arquivo chamado "uploads" dentro de seus diretórios impossíveis de excluir.

A solução seria alterar "--exclude = uploads" para "--exclude = uploads /"

    
por 10.05.2014 / 13:21
0

Na minha configuração ((a origem é o formato do Ubuntu tipo ext4 para direcionar o fuseblk do tipo Western Digital) ele funciona com:

rsync -a -v --progress --modify-window=1 -c -b -i -s -m --del -vv --ignore-errors --chmod=ugo=rwx --delete --delete-excluded  --exclude='*~'  --exclude='.*' --backup-dir=.rsync_bak /home/test /media/user/usbHDD
    
por 04.01.2018 / 20:30
-1

Um diretório deve estar vazio para que você o exclua, o sistema de arquivos normalmente requer isso.

Portanto, normalmente rsync ou rm recursivamente excluiria todo o conteúdo primeiro e só então excluiria o diretório agora vazio.

Se o usuário atual não for o proprietário de todos os arquivos, as permissões do sistema de arquivos não permitirão que você exclua esses arquivos. Como eles não serão removidos, o diretório não será esvaziado e a exclusão falhará.

Meu primeiro palpite é que alguns arquivos nesse diretório são de propriedade de outro usuário, por exemplo, o apache ou ninguém usuários.

    
por 05.02.2014 / 16:52