O gnu tar tem uma opção --ignore-failed-read
que faz exatamente isso.
Se você não estiver usando o GNU tar, você pode gerar uma lista de arquivos para backup ou uma lista de arquivos a serem excluídos. O GNU find tem um predicado -readable
que testa se você tem permissão de leitura no arquivo. Com outras versões do find, para ficar com find
sozinho, você precisará aproximá-lo das permissões de arquivo ( -perm
) e propriedade ( -user
, group
), o que dificulta o trabalho com grupos, ACLs, etc. Você pode obter um teste preciso chamando o programa externo ou o shell incorporado em test
. Aqui está um exemplo assumindo que seu tar
tem a opção -X
para ler uma lista separada por novas linhas 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 - .