Fiz um backup para uma unidade NTFS e, bem, esse backup realmente se mostrou necessário. No entanto, a unidade NTFS atrapalhou as permissões. Eu gostaria de restaurá-los ao normal sem corrigir manualmente cada arquivo.
Um problema é que, de repente, todos os meus arquivos de texto obtiveram permissões de execução, o que está errado. Então eu tentei:
sudo chmod -R a-x folder\ with\ restored\ backup/
Mas está errado, pois remove também a x
permissão dos diretórios, o que os torna ilegíveis.
Qual é o comando correto neste caso?
permissions
executable
recursive
gaazkam
fonte
fonte
Respostas:
O
-x
remove permissões de execução para todosO
+X
adicionará permissões de execução para todos, mas apenas para diretórios.fonte
chmod -R -x+x *
chmod -R -x * && chmod -R +X *
Ok, reli as páginas de manual "chmod" para Mac OS X, BSD e Linux e fiz alguns experimentos. Aqui está o que eu aprendi sobre modos simbólicos. Pode ser complicado, mas vale a pena entender:
Por exemplo,
a+x
tornaria um arquivo executável por todos.a+X
tornaria um arquivo executável por todos, se tivesse sido executável por alguém.a+x
tornaria um diretório pesquisável por todos.a+X
também tornaria um diretório pesquisável por todos.A principal diferença entre o BSD e o Linux é que, com o BSD, a determinação é feita com base nas permissões do arquivo antes da execução do chmod. Enquanto no Linux, a determinação é feita imediatamente antes da cláusula + X ser executada.
Assim, com o BSD, a combinação
a-x,a+X
removeria a permissão de execução / pesquisa e tornaria um diretório pesquisável por todos, e tornaria um arquivo executável por todos, se originalmente fosse executável por alguém.Com o Linux,
a-x,a+X
removeria a permissão de execução / pesquisa e tornaria um diretório pesquisável por todos, deixando um arquivo executável por ninguém.Aqui está um exemplo concreto: em uma máquina BSD: um diretório, um arquivo executável e um arquivo não executável:
Observe que o diretório e "fie" são executáveis / pesquisáveis pelo usuário, mas não por outros.
Agora nós executamos
chmod a-x,a+X *
. A primeira cláusula retira o bit de execução / pesquisa de todos os usuários para todos os arquivos, mas a segunda cláusula o adiciona novamente para "fee" e "fie". "fee" porque é um diretório e "fie" porque tinha pelo menos um bit executável para começar.Eu tive o mesmo resultado em execução
chmod -x+X
.Conclusão: A solução de Jak Gibb funcionará no Linux, mas para o BSD, você precisaria fazer duas passagens.
Não testei isso no SVr4 ou em outras variantes do Unix.
fonte
Uma maneira de fazer isso:
fonte
chmod a-x {}
chmod a-x {}
também pode acabar removendo as permissões que você não deseja alterar e pode deixar os arquivos graváveis em todo o mundo. O ponto é que 0644 é um compromisso "geralmente razoável". O OP deve, é claro, também envolver o cérebro antes de aplicar soluções da Internet em seu computador.chmod
. Se os arquivos de backup contiverem scripts e binários, a remoçãox
deles estará incorreta. Se as permissões anterioreschmod
forem 0777,chmod a-x
ainda as deixarão 0666, o que provavelmente não é o que você deseja. O que estou dizendo é quechmod 0644
há melhores heurísticas, não que issochmod a-x
esteja errado.Removeria a permissão de execução para arquivos que não são do tipo diretório (conforme solicitado) nem link simbólico (links simbólicos geralmente são sempre rwxrwxrwx e
chmod
afetariam o destino do link simbólico neles).Observe que:
apenas alteraria a permissão de arquivos regulares . Isso excluiria diretórios e links simbólicos , mas também dispositivos , chamados pipes , soquetes e possivelmente outros, dependendo do sistema (embora no caso do OP de um backup de um sistema de arquivos NTFS, é improvável que eles estejam presentes).
fonte
No zsh, use o qualificador glob
.
para corresponder apenas aos arquivos regulares (sem incluir links simbólicos) eD
aos arquivos de ponto:Se a linha de comando for muito longa, você pode usar
zargs
:fonte