Eu tenho um arquivo morto, que é arquivado por outra pessoa e quero, automaticamente, após o download, alterar uma ramificação do sistema de arquivos nos arquivos extraídos para obter acesso de leitura. (Não posso alterar como o arquivo morto é criado).
Eu olhei para este segmento: chmod: Como adicionar recursivamente permissões de execução apenas a arquivos que já têm permissão de execução, como em alguns outros, mas sem alegria.
Os diretórios originalmente vêm com vários sinalizadores, mas todos errados, podem aparecer como:
drwx------
d---r-x---
drwxrwxr-x
dr--r-xr--
Esses são apenas os poucos que descobri até agora, mas poderiam ser mais.
find
erros quando tenta procurar em um diretório sem x
permissão e, portanto, não o passa para chmod
. O que tenho feito até agora é alterar manualmente as permissões no diretório pai, depois entrar nos diretórios filhos e fazer o mesmo por eles e assim por diante. Mas isso é muito trabalho manual. Não existe uma maneira de fazer isso automaticamente?
Ou seja, como estou fazendo isso agora:
Faz:
$ chmod -R +x
$ chmod -R +r
até não receber erros, então
$ find -type f -exec chmod -x {} +
Mas deve haver uma maneira melhor.
Respostas:
Você precisa de acesso de leitura, além de executar o acesso, para listar um diretório. Se você tiver apenas acesso de execução, poderá descobrir os nomes das entradas no diretório, mas nenhuma outra informação (nem mesmo os tipos, para que você não saiba quais das entradas são subdiretórios). Isso funciona para mim:
fonte
+
cria a linha de comando de uma maneira diferente. Na verdade, eu não estava ciente disso;\;
é a maneira usual, com um comando por arquivo que corresponde à pesquisa."{}"
vez de{}
deve corrigi-lo.Você pode usar chmod com a
X
letra de modo (o X maiúsculo) para definir o sinalizador executável apenas para diretórios.No exemplo abaixo, o sinalizador executável é limpo e, em seguida, definido para todos os diretórios recursivamente:
Um pouco de explicação:
chmod -x foo
- limpe o sinalizador eXecutable parafoo
chmod +x foo
- defina o sinalizador eXecutable parafoo
chmod go+x foo
- igual ao acima, mas defina o sinalizador apenas para usuários de grupo e outros , não toque na permissão de usuário (proprietário)chmod go+X foo
- o mesmo que acima, mas se aplica apenas a diretórios, não toque em arquivoschmod -R go+X foo
- o mesmo que acima, mas faça isso recursivamente para todos os subdiretórios defoo
fonte
Tente alterar todas as persuasões ao mesmo tempo:
fonte
find -type f -exec chmod -x {} +
depois.Para tornar tudo gravável pelo proprietário, leia / execute pelo grupo e executável mundialmente:
Para tornar tudo aberto:
fonte
chmod -R 0777 .
Adicionando permissões executáveis, recursivamente , a todos os arquivos (não pastas) dentro da pasta atual com
sh
extensão:find . -name '*.sh' -type f | xargs chmod +x
* Observe o tubo (
|
)fonte
Dê 0777 a todos os arquivos e diretórios iniciando no caminho atual:
fonte