De Wiki do Arch Linux Brasil
#! /usr/bin/python
# coding: utf-8
#### Altera as permissões de arquivos *e* diretórios (com valores diferentes para cada um) recursivamente.
## Autor: Armando M. Baratti
## E-mail: ambaratti ponto listas arroba gmail ponto com
## Última alteração: 2008-01-19
## Depende de:
## python
import os, sys
ERRO_MOD_RANGE = -1
ERRO_MOD_INV = -2
def GetMod(Msg):
''' Máscara para entrada de modos (permissões).
'''
ModStr = raw_input('%s: ' % Msg)
try:
Mod = int(ModStr, 8)
if (Mod >= 0000) and (Mod <= 0777):
return Mod
else:
# Faixa incorreta do modo
return ERRO_MOD_RANGE
except ValueError:
# Valor inválido (ex. alfanumérico) do modo.
return ERRO_MOD_INV
if __name__ == '__main__':
if (len(sys.argv) > 1) and (os.path.isdir(sys.argv[1])):
DirBase = sys.argv[1]
while True:
ArqMod = GetMod('Direito de arquivos')
if ArqMod == ERRO_MOD_RANGE:
print '\t\tFora da faixa (000 - 777).'
elif ArqMod == ERRO_MOD_INV:
print '\t\tValor octal inválido.'
else:
break
while True:
DirMod = GetMod('Direito de diretórios')
if DirMod == ERRO_MOD_RANGE:
print '\t\tFora da faixa (000 - 777).'
elif DirMod == ERRO_MOD_INV:
print '\t\tValor octal inválido.'
else:
break
for DirAtu, Dirs, Arqs in os.walk(DirBase):
try:
for Arq in Arqs:
Arquivo = os.path.join(DirAtu, Arq)
os.chmod(Arquivo, ArqMod)
except:
print 'Erro arquivo: %s' % ArqAtu
try:
for Dir in Dirs:
Diretorio = os.path.join(DirAtu, Dir)
os.chmod(Diretorio, DirMod)
except:
print 'Erro diretório: %s' % Diretorio
print 'Finalizado.'
else:
print 'Uso: %s <nome_dir>' % sys.argv[0]
## Sugestões:
## autor:
## data:
## conteúdo: