Existe um comando ou sinalizador para clonar a propriedade do usuário / grupo e as permissões em um arquivo de outro arquivo? Para tornar as permissões e propriedades exatamente as de outro arquivo?
shell
permissions
files
chown
user394
fonte
fonte
--reference
parâmetro dechmod
echown
antes :).Em qualquer unix com utilitários GNU, como Linux (não incorporado) ou Cygwin, você pode usar
chmod --reference
echown --reference
.Se o seu sistema tiver ACLs , tente os comandos
getfacl
esetfacl
. Esses comandos diferem um pouco de sistema para sistema, mas em muitos você pode usargetfacl other_file | setfacl -bnM - file_to_change
para copiar as permissões. Isso não copia a propriedade; você pode fazer isso analisando cuidadosamentels -l other_file
, assumindo que não possui nomes de usuário ou grupo que contenham espaços em branco.fonte
Fiz um comando bash com base na resposta de Matteo :)
Código:
chmod $( stat -f '%p' "$1" ) "${@:2}"
Uso:
cp-permissions <from> <to>...
fonte
${*:2}
? Nunca faça isso de novo! Isso falhará se algum dos nomes de arquivos contiver espaço (ou guias). Use"${@:2}"
. Além disso, use em"$1"
vez de apenas$1
.chmod "$(stat -c '%a' "$fromfile")" tofile
no GNU Coreutils, mas você também pode usar--reference
nesse caso, já que ostat
utilitário CLI não é POSIX, ele também diz pubs.opengroup.org/onlinepubs/9699919799/utilities/ls.htmls -l
que não é suficiente: "A saída de ls (com as opções -l e relacionadas) contém informações que logicamente podem ser usadas por utilitários como chmod e touch para restaurar arquivos para um estado conhecido.No entanto, essas informações são apresentadas em um formato que não pode ser usado diretamente por esses utilitários ou facilmente traduzido para um formato que possa ser usado ".Se você não estiver usando um sistema com o chmod / chown do GNU (que suporta a
--reference
opção), você pode tentar analisar a saída dels -l
Aqui está um pequeno script para
chmod
(se você tem uma visão que suporta regexes estendidos, eles podem ser escritos de uma maneira muito mais legível ...)ATUALIZAÇÃO :
Isso é ainda mais fácil usando
stat
:fonte
ls -l
saída, você poderia analisar astat
saída.stat
sintaxe * BSD aqui. Seuchmod $(stat ...)
comando não funcionará porque,%p
sozinho, gera muitas informações para * BSDschmod
, use%Lp
para gerar apenas os bits u / g / o. Algo um pouco mais elaborado seria necessário para os bits sticky / setuid / setgid.Eu queria adicionar um ajuste ao script de Matteo . Um loop for deve ser usado para validar a existência dos arquivos antes de executar o comando chmod neles. Isso deixará o erro de script mais gracioso.
Eu acho que essa é a melhor opção, pois pode ser usada para todos os sistemas operacionais * nix, como Solaris, Linux, etc.
Eu descobri que em uma das minhas máquinas Solaris 10,
stat
não foi encontrada. Isso pode ser um problema com minha configuração.fonte
Isso funciona para mim:
cp -p --attributes-only <from> <to>
fonte