Alguma idéia de como fazer backup de uma estrutura de diretórios para a qual existem alguns arquivos e / ou diretórios para os quais você não tem permissão para ler? Gostaria apenas de ignorá-los, sem travar o backup (tar? Jar?).
Alguma idéia de como fazer backup de uma estrutura de diretórios para a qual existem alguns arquivos e / ou diretórios para os quais você não tem permissão para ler? Gostaria apenas de ignorá-los, sem travar o backup (tar? Jar?).
Respostas:
O gnu tar tem uma opção --ignore-failed-read
que faz exatamente isso.
Se você não estiver usando o GNU tar, poderá gerar uma lista de arquivos para backup ou uma lista de arquivos a serem excluídos. O GNU find possui um -readable
predicado que testa se você tem permissão de leitura no arquivo. Com outras versões do find, para ficar find
sozinho, é necessário aproximar isso com permissões de arquivo ( -perm
) e propriedade ( -user
, group
), o que dificulta o enfrentamento de grupos, ACLs etc. Você pode obter um teste preciso ligando para o programa externo ou shell embutido test
. Aqui está um exemplo, supondo que você tar
tenha a opção -X
de ler uma lista separada por nova linha de nomes de arquivos a serem excluídos (nomes de arquivos contendo novas linhas são ignorados, para evitar problemas de análise):
find . ! -name '*
*' -exec sh -c 'for x; do [ -r "$x" ] || printf "%s\\n" "$x"; done' _ {} |
tar -cf backup.tar -X - .
Se você não tiver novas linhas nos caminhos, poderá fazer o seguinte:
find . -type f -readable -print | tar cf test.tar -T -
Isso pode estar limitado ao GNU find
e tar
pode não funcionar com certos sistemas de arquivos (NFS, FUSE). Se houver ou houver novas linhas, use em -print0
vez de -print
para find
e adicione --null
para tar
.