Copie arquivos com permissão 200

1

Eu quero recursivamente copiar um diretório, preservando os atributos de arquivo, que contém uma árvore de diretórios incluindo alguns arquivos que possuem permissão 200 (por exemplo, --w------- ).

O comando copy cp -ar sourcedirectory targetdirectory pula esses arquivos, dizendo, para cada um, algo assim:

cp: cannot open 'sourcedirectory/foo/somefile.bar' for reading: Permission denied'

Minha pergunta: sem alterar suas permissões, como posso evitar que o comando copy ignore esses arquivos?

Se você acha que eu deveria usar um utilitário diferente de cp no meu comando copy, por favor, explique o porquê.

    
por sampablokuper 21.10.2012 / 14:03

3 respostas

2

Você deve tornar o arquivo legível para copiá-lo. Isso não está relacionado à escolha da ferramenta: todo programa não conseguirá abrir o arquivo para leitura, pois você não tem permissão para lê-lo.

Se as ACLs estiverem ativadas (com ext2 / ext3 / ext4, isso requer a opção de montagem acl ) e você não tem interesse em copiá-los, adicione uma ACL que permita ao usuário fazer a cópia ler o arquivo.

setfacl -R -m u:username:rX sourcedirectory

Caso contrário, você terá que alterar as permissões do arquivo antecipadamente e restaurá-las (em ambos os lados) depois, ou fazer a cópia como root.

    
por 22.10.2012 / 00:03
1

Esta página oferece várias maneiras de copiar dados, preservando o máximo possível de metadados. Você poderia tentar cada um deles, como root :

  • cp -av /source /dest # não usa -r , seu comportamento é difícil de prever e -a já inclui -R
  • cd /source; tar -cf- . | tar -xvpf- -C /dest
  • cd /source; find . -depth -print0 | cpio -pdmv -0 /dest
  • rsync -av --delete --hard-links /source/ /dest

O rsync é um pouco complicado sobre arrastar / s em seus argumentos. Como explicado na manpage, ambas são formas de copiar o diretório /source/foo to /dest/foo :

  • rsync ... /source/foo /dest
  • rsync ... /source/foo/ /dest/foo

É possível que nada disso funcione. Certifique-se de experimentá-los enquanto raiz para os melhores prospectos.

    
por 21.10.2012 / 16:02
0

Até onde eu posso pensar, podemos seguir estas etapas para manter a permissão como está e copiar todos os arquivos também.

$ cd <sourcedirectory>

$ tar -cvf <sourcedirectory.tar> .

$ cp <sourcedirectory.tar> <destinationdirectory>

$ tar -xvf <sourcedirectory.tar>
    
por 21.10.2012 / 14:24