Escrevi um script para alterar as permissões de todos os arquivos de um diretório:
#!/bin/bash
files=`find "$1"`
for f in $files; do
chown "$2" "$f"
chmod 600 "$2"
done
Obviamente, o segundo argumento para chmod deveria ser "$f"
em vez de "$2"
. Porém, quando executei o script (em um diretório pequeno), também esqueci de incluir o segundo argumento, que deveria ser "dave:dave"
. Agora, todos os arquivos do diretório estão completamente bagunçados:
~ $ ll Documents/
ls: cannot access Documents/wiki.txt: Permission denied
ls: cannot access Documents/todo.txt: Permission denied
ls: cannot access Documents/modules.txt: Permission denied
ls: cannot access Documents/packages.txt: Permission denied
total 0
-????????? ? ? ? ? ? modules.txt
-????????? ? ? ? ? ? packages.txt
-????????? ? ? ? ? ? todo.txt
-????????? ? ? ? ? ? wiki.txt
A execução não sudo chown dave:dave Documents/*
gera sudo chmod 600 Documents/*
erros, mas os arquivos permanecem inalterados. Eu sei que posso transformar sudo cat
cada arquivo em um novo arquivo, mas estou curioso para saber como corrigir as permissões nos arquivos originais.
Responder1
Além das respostas dadas nos comentários, você também deve observar que seu script será interrompido em qualquer nome de arquivo que contenha espaços.
Você pode fazer tudo isso em um único comando usando find
, em vez de tentar analisar uma lista de nomes de arquivos gerados por find
. Muito mais robusto; lida com nomes de arquivos independentemente de caracteres especiais ou espaços em branco.
find "$1" -type f -exec chown "$2" {} \; -exec chmod 600 {} \;
Observe que se chown
falhar em um determinado arquivo, o chmod
não será executado nesse arquivo. Esse é provavelmente o comportamento que você deseja.
Como você já executou um comando incorreto que removeu as permissões de execução do diretório "Documentos", será necessário adicionar novamente as permissões de execução:
chmod u+x Documents
Se houver mais diretórios que tiveram permissões de execução removidas erroneamente, você poderá corrigi-los com:
find Documents -type d -exec chmod u+x {} \;
Eu não acho que você precisará disso, pois uma vez que as permissões de execução foram removidas de "Documentos", nenhum de seus subdiretórios estaria acessível, portanto, as permissões de execução não teriam sido removidas deles.
Responder2
A única vez que vi arquivos com permissões tão estranhas, foi em umseriamentesistema de arquivos bagunçado. Uma rodada fsck(8)
fez com que muitos deles voltassem à relativa normalidade, mas muitos ainda estavam fortemente corrompidos. Acredito que tenha sido devido a um problema de hardware (tirei os arquivos bons do disco e os joguei fora).