No caso de você estar usando o GNU Coreutils. Este é um bug que foi corrigido na versão 8.26.
Portanto, a ferramenta alternativa seria um coreutils atualizado, ou, por exemplo, rsync
, que é capaz de fazer isso mesmo com a preservação de permissões:
$ rsync -a --relative /sys/power/state /tmp/test
$ rsync -a --relative /sys/bus/cpu/drivers_autoprobe /tmp/test/
Embora eu veja que o rsync tem outros problemas para esses arquivos sysfs específicos, veja opção rsync para desabilitar a verificação?
Outra solução alternativa dura seria chmod
todas as pastas após cada comando cp
.
$ find /tmp/test -type d -exec chmod $(umask -S) {} \;
(O comando find / chmod acima também não funcionaria para qualquer combinação de permissões existentes e umask.)
BTW você pode relatar este bug para sua distribuição Linux e eles podem consertar seu pacote 8.21 através de atualizações de manutenção.