Alguém tem uma ferramenta ou script que irá corrigir recursivamente as permissões de arquivo em um diretório?
Em uma máquina Ubuntu Linux, vários arquivos foram copiados para um disco USB com permissões 777 completas (usuário, grupo, outra - leitura, gravação, execução) por erro. Quero colocá-los novamente no diretório do usuário corrigido.
Os diretórios devem ter 775 e todos os outros arquivos podem ter 664. Todos os arquivos são imagens, documentos ou MP3, portanto nenhum deles precisa ser executável. Se o bit do diretório estiver definido, ele precisará de execução; caso contrário, ele precisará apenas de usuário e grupo, leitura e gravação.
Achei que valia a pena verificar se esse utilitário existe antes de hackear um shell script :)
linux
ubuntu
permissions
shell
filesystems
mlambie
fonte
fonte
Respostas:
Isso deve fazer o truque:
fonte
O find pode fazer o truque sozinho com -exec:
para impedir a localização de um chmod para cada entrada:
(efetivamente chama o chmod uma vez com a lista de todos os arquivos como parâmetros, em vez de um chmod por arquivo)
fonte
Esta resposta não resolverá o seu problema, mas alguém pode achar útil para um problema semelhante em que os arquivos têm menos permissão do que deveriam.
A mágica é a permissão X, em vez de x. A página de manual do chmod descreve assim:
Isso não é adequado no seu caso, pois seus arquivos têm permissão de execução, portanto, corresponderá ao segundo teste.
fonte
Eu criei um script a partir da solução do freiheit, que adiciona verificação básica de argumentos.
fonte
chmod: missing operand after ‘0644’
. Posso sugerir agrupar as instruções find com uma verificação para ver se o destino existe?if [ -d $1 ]; then find $1 -type d -print0 | xargs -0 chmod 0755; fi; if [ -f $1 ]; then find $1 -type f -print0 | xargs -0 chmod 0644; fi
Caso você esteja usando ssh, é recomendável não modificar
~/.ssh
permissões.fonte
Criei um script bash muito simples outro dia porque precisava corrigir permissões. Por que não existe um utilitário formal para redefinir as permissões básicas, não raiz, de arquivos e pastas?
O script usa para localizar 755 todas as pastas e 644 bibliotecas. Em seguida, ele testa cada arquivo consigo mesmo para verificar se ele possui um cabeçalho binário de elfo. Caso contrário, ele procura nos dois primeiros caracteres por shebang
#!
. Ele 755 essas instâncias e 644 tudo o resto depois de verificar se o arquivo já tem a permissão correspondente.Casos especiais são tratados com uma exceção como a
*.bak
de arquivos a serem ignorados.fonte
Encontrei uma solução simplificada de C-shell. Isso pode não ser completamente infalível, mas deve funcionar para a maioria dos diretórios. Ele assume que o comando 'file' do Unix funciona e encontra os arquivos exec para redefini-los de volta às permissões exec:
fonte
Uma alternativa, que não responde exatamente à solicitação original, mas é mais provável que o OP pretenda, é especificar simbolicamente as permissões. Por exemplo, suponho que o OP deseja "remover o acesso de gravação para o público e remover a permissão executável de todos os arquivos".
Isso é possível se você usar a representação de permissão simbólica.
Escrevendo dessa maneira, em vez de definir explicitamente "0664", você evita acidentalmente permitir permissões extras para arquivos que foram bloqueados anteriormente. Por exemplo, se um arquivo era 0770, ele não se tornará 0664 por engano.
Para fazer o primeiro requisito, basta usar
chmod
:Para fazer o segundo requisito:
Ou para fazer as duas coisas:
fonte