Unix set permissão do arquivo como outro arquivo

2

Existe alguma maneira de fazer com que o arquivo A tenha exatamente a mesma permissão de arquivo que o arquivo B sem especificar permissão como 777. Por exemplo, geralmente eu ls arquivo B e verifique sua configuração de permissão. Então chmod ??? fileA '. No entanto, estou procurando um comando como

chmod --argument_to_copy_file_permission fileA fileB

Por favor, informe.

EDITAR: By the way, existe algum comando para ver a permissão de arquivo no modo de dígitos (como 777), obrigado.

    
por Stan 06.11.2010 / 20:35

7 respostas

5

Isso funciona no Linux; Não tenho certeza se os programas ou opções são POSIX.

chmod 'stat -c '%a' fileB' fileA

No Mac OSX, o seguinte funciona da mesma maneira, mas usando opções que funcionam. :)

chmod 'stat -f '%Op' fileB' fileA

(Isso é um maiúsculo "o", não um zero.)

Mais uma vez, não sei se é POSIX. Eu sei que não vai funcionar no Linux; a opção -f significa algo totalmente diferente lá.

De qualquer forma, ambos os comandos funcionam tomando a saída do comando stat no arquivo B, especificamente os modos de arquivo formatados em octal, e usam isso como o modo para definir no arquivoA. Isso significa que o material entre as backquotes lhe dará os modos de arquivo.

    
por 06.11.2010 / 20:59
5

chmod --reference=fileA fileB deve fazer isso de acordo com a página do manual .

    
por 06.11.2010 / 20:59
2

É um script perl bem curto:

my ($dev, $ino, $mode, @junk) = stat "fileA";
$mode &= 07777;  # mode includes type information in higher bits
printf "%o\n", $mode;
chmod $mode, "fileB";

Fazendo com que argumentos e opções sejam deixados como um exercício para o leitor ...

    
por 06.11.2010 / 20:43
1

Mais ou menos

$ chmod ugo=rwxrwxrwx filename

Dessa forma, você pode simplesmente digitar em que ls(1) relatórios ou escrever um script simples para fazer isso.

Isso funcionará em todas as versões do Unix, incluindo Linux e Mac.

    
por 06.11.2010 / 20:47
0

Também é um script Python bem curto:

import os
os.chmod('fileA', os.stat('fileB').st_mode)

E Ruby:

File.chmod(File.stat('fileA').mode, 'fileB')
    
por 06.11.2010 / 21:32
0

Eu pouco mais do que o script perl:

chmod $(ls -l file.whose.permissions.you.want.to.copy | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf("%0o ",k);print}' | awk '{print $1}') 
    
por 06.11.2010 / 21:05
0

Você pode enviar a saída de stat , modificá-la e usá-la para alterar as permissões de fileB :

stat fileA | grep "Access: (" | cut -c 10-13 | xargs -i  chmod {} fileB
    
por 08.11.2010 / 16:15

Tags