Estou tentando encontrar uma maneira POSIX padrão de duplicar as permissões de um arquivo para outro arquivo. Em um sistema GNU, isso é fácil:
[alexmchale@bullfrog ~]$ ls -l hardcopy.*
-rw-r--r-- 1 alexmchale users 2972 Jul 8 20:40 hardcopy.1
---------- 1 alexmchale users 2824 May 14 13:45 hardcopy.4
[alexmchale@bullfrog ~]$ chmod --reference=hardcopy.1 hardcopy.4
[alexmchale@bullfrog ~]$ ls -l hardcopy.*
-rw-r--r-- 1 alexmchale users 2972 Jul 8 20:40 hardcopy.1
-rw-r--r-- 1 alexmchale users 2824 May 14 13:45 hardcopy.4
Infelizmente, o sinalizador --reference para chmod é uma opção não padrão. Então, isso está fora dos meus propósitos. Eu preferiria que fosse uma frase única, mas isso não é necessário. Por fim, ele precisa estar na sintaxe do POSIX sh.
command-line
unix
chmod
posix
Alex
fonte
fonte
cp has template
deve ser usadocp -p
para preservar os atributos de modo e propriedade.cp
caso o proprietário / grupo do arquivo (por exemplo, "usuário") seja diferente daquele que está fazendo a cópia (por exemplo, raiz).cp -p
lá.Você pode usar o
stat
comando para obter a permissão do arquivo:Sintaxe do Mac OS X (BSD):
Sintaxe do Linux (não tenho certeza):
O símbolo ` é uma citação retroativa.
fonte
stat
é exigido pelo POSIX. Geralmente não está disponível.Os utilitários da ACL getfacl e setfacl podem ser usados para essa finalidade, mas não sei se esse POSIX é compatível o suficiente. Funciona pelo menos no FreeBSD 8.0 e Linux, mas por outro lado pode ser necessário instalar os utilitários da ACL.
Na página de manual:
Eu acho que o getfacl e o setfacl também podem operar permissões de arquivo padrão, além das ACLs.
fonte
cp -p
preservará as permissões de arquivo.fonte
-p
) funciona para o que o OP deseja, que é duplicar as permissões para um arquivo diferente , não uma duplicata do arquivo.Uma maneira portátil e direta não é um utilitário padrão - você precisaria chamar stat () no arquivo de modelo e depois chmod () no (s) arquivo (s) de destino. Isso significa usar uma linguagem como C ou outra linguagem amplamente usada como perl.
As permissões de acesso ao arquivo são especificadas no membro struct stat st_mode pelos 0007777 bits. A solução de Dennis está correta, se for um pouco pesada em E / S, portanto, para arquivos realmente grandes, pode falhar:
Considere este exemplo não pronto para produção:
fonte