
Estou tentando alterar a propriedade e as permissões de alguns arquivos (e diretórios) no diretório atual. Eu tentei isso:
chown username:groupname .
... esperando que isso afetasse todos os arquivos no diretório atual, mas afetasse apenas o diretório em que estou (que é o oposto do que desejo fazer). Quero alterá-lo em todos os arquivos sem afetar o diretório atual em que estou.
Como posso chown e chmod todos os arquivos no diretório atual?
Responder1
Você deseja usar chown username:groupname *
e deixar o shell expandir *
para o conteúdo do diretório atual. Isso alterará as permissões de todos os arquivos/pastas no diretório atual, mas não o conteúdo das pastas.
Você também poderia fazer isso chown -R username:groupname .
, o que alteraria as permissões no diretório atual e, em seguida, recorreria a ele e a todas as subpastas para alterar as permissões.
chown -R username:groupname *
alterará as permissões em todos os arquivos e pastas recursivamente, deixando o diretório atual sozinho. Este estilo e o primeiro estilo são os que uso com mais frequência.
Responder2
Acho que você quer isso:
chown username:groupname *
Se você também deseja alterar subdiretórios recursivamente, precisará da opção -R
( -r
está obsoleto):
chown -R username:groupname *
Responder3
chown
é ótimo se você for um superusuário. Tive um problema em que outra pessoa executou make
meu diretório e agora possuía alguns arquivos que não pude modificar. Aqui está minha solução alternativa que lida com arquivos e diretórios, embora deixe os diretórios com sufixo .mkmeowner
se não puder excluí-los.
- O script a seguir altera a propriedade de arquivos e diretórios passados a ele para pertencerem ao usuário atual, tentando contornar problemas de permissão fazendo uma nova cópia de cada diretório ou arquivo que não pertence ao usuário atual, excluindo (ou tentando excluir) o arquivo original e renomeando-o adequadamente.
- A intenção é que seja uma abreviatura de "torne-me proprietário". Eu não uso sublinhados porque eles são difíceis de digitar.
Exemplos:
% mkmeowner .
% mkmeowner dirpath1 dirpath2
- Requer que o seguinte script
mkmeownerone
esteja em seu caminho.
mkmeproprietário:
#!/bin/bash
[ "x$1" == "x-h" ] || [ "x$1" == "x--help" ] && cat << END && exit 0
Usage: $0 dirorfile [direorfile2 ...]:
change ownership of directories or files to current user.
Current user must have permissions to read those and write to owner directory.
END
mkmeownerone=`which mkmeownerone`
for d in $*; do
find "$d" -not -user `whoami` -exec $mkmeownerone {} \;
done
mkmeproprietário:
#!/bin/bash
# change ownership of one file or directory
f="$1"
expr match "${f}" '.*\.mkmeowner$' > /dev/null && exit 1 # already tried to do this one
if mv -f "$f" "${f}.mkmeowner"; then
cp -pr "${f}.mkmeowner" "$f" && rm -rf "${f}.mkmeowner"
exit 0
fi
exit 1
Responder4
Outra forma de alterar username:groupname
todos os arquivos no diretório atual é trabalhar com um subshell:
chown username:groupname $(find . -name "[a-zA-Z0-9]*")
O comando interno bash find
é usado com uma expressão regular [a-zA-Z0-9]*
em um subshell $()
que pode formar a base de tarefas administrativas mais complexas.