Quando conecto um pendrive USB (FAT) à minha máquina Mac ou Ubuntu, todos os arquivos têm os bits executáveis definidos. Depois de copiar a estrutura de diretórios para o meu disco rígido, como removo os bits executáveis recursivamente apenas dos arquivos e os mantenho nos diretórios?
73
Respostas:
Com a
chmod
variante de comando único GNU (no Ubuntu) (iniciando no diretório atual):Explicação:
-R
- operar recursivamente-x
- remova sinalizadores executáveis para todos os usuários+X
- defina sinalizadores executáveis para todos os usuários, se for um diretórioNesse caso, o capital
X
aplica-se apenas aos diretórios porque todos os sinalizadores executáveis foram limpos por-x
. Caso contrário,+X
define sinalizadores executáveis também se o sinalizador foi originalmente definido para qualquer usuário, grupo ou outros.Com o BSD
chmod
(presente no Mac OS X), você deve fazer isso separadamente em dois comandos:(Se você também deseja incluir arquivos ocultos no diretório principal, é necessário alterar * para. (Point), mas ele não foi testado.)
fonte
chmod -R a-x+X *
umask
não permitirx
permissão para todos. Você usa o padrãoumask
ou o mudou? Você poderia enviar a saída doumask
comando? Além da sua solução, há também esta possibilidade: achmod -R a-x,+X *
qual definirá ax
permissão de acordo com o seuumask
. Atualizarei a resposta, mas gostaria de verificar o comportamento do BSD / Mac OS X primeiro.find
variante na resposta abaixo para o seu estilo de combinar ferramentas simples que fazer uma coisa bem..
em vez de*
se pretender que esta a ser aplicado a todos os arquivosSe você entrar no caminho correto primeiro:
ou
A localização localiza todos os arquivos do tipo 'f' (que significa arquivo regular) no caminho. e depois chama chmod -x em cada arquivo. O {} é substituído pelo nome do arquivo e o \; finaliza o comando chmod.
fonte
find
suporte, use em-exec ... \+
vez de-exec ... \;
- exigirá menosfork
+exec
s. Caso contrário, usefind ... -print0 | xargs -0 ...
.find . -type f -perm +111 -exec chmod -x {} \;
find
suportes-print0
eu tenho certeza que também irá apoiar-exec
No Linux e Unix em uma janela de terminal ou no Mac OS X, use-o no Terminal.app:
fonte
O
chmod -x+X
caminho também não funcionou para mim no ubuntu, por isso escrevi este script python mínimo:Se houver algum material extra sofisticado, como soquetes em seu sistema de arquivos, convém cercar o último chmod com uma tentativa / captura.
fonte