Como chown/chmod todos os arquivos no diretório atual?

Como chown/chmod todos os arquivos no diretório atual?

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( -restá obsoleto):

chown -R username:groupname *

Responder3

chowné ótimo se você for um superusuário. Tive um problema em que outra pessoa executou makemeu 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 .mkmeownerse 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 mkmeowneroneesteja 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:groupnametodos 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.

informação relacionada