Script para aplicar permissão recursiva em diretórios e arquivos [RESOLVIDO]

1. Script para aplicar permissão recursiva em diretórios e arquivos [RESOLVIDO]

Allan
locorj

(usa openSUSE)

Enviado em 19/11/2014 - 19:41h

Boa noite, estou precisando de uma ajuda no script para aplicar permissão nos subdiretórios da raiz informada e nos arquivos dos subdiretórios, porém ele deve ignorar os arquivos na raiz informada, basicamente o script não funciona quando tem espaço no nome dos diretórios ou arquivos... já estou batendo cabeça 2 dias... já tentei de 3 formas diferentes.

Segue abaixo

#!/bin/bash
# Script criado por Allan

echo "Informe o diretorio raiz: " ; read path_raiz
echo "Permissao dos diretórios: " ; read permissao_diretorio
echo "Permissao dos arquivos do diretório: " ; read permissao_arquivos

function gotfile
{
fileArray=("$(find $1 -type f)")

tLen=${#fileArray[@]}

for (( i=0; i<${tLen}; i++ ));
do
echo "arq --> ${fileArray[$i]}"
done
}

function gothrudir
{
###################
# MODO 1
###################
# for localizado in `ls "$1"`; do
# f=$1"/"$localizado

# #echo $f

# if [ -d $f ] && [ $f != $path_raiz ] ; then
# echo "dir --> $f"
# gothrudir $f "F"
# else
# if [ $2 = "F" ]; then
# if [ -f $f ]; then
# echo "arq --> $f"
# else
# echo "err --> $f invalido";
# fi
# fi
# fi
# done
###################
# MODO 2
###################
# cd $1
# #pwd
# #read -p "Aperte [Enter] para continuar"
# for localizado in $(find .); do
# f=$localizado

# #ls -la
# #read -p "Aperte [Enter] para continuar"

# if [ $f != "." ] && [ $f != ".." ] ; then
# #echo "achado --> "$f
# if [ -d $f ] && [ $f != $path_raiz ] ; then
# echo "dir --> $f"
# # #gotfile $f
# #gothrudir $f "F"
# else
# #echo "valor --> $f"
# if [ $2 = "F" ]; then
# if [ -f $f ]; then
# echo "arq --> $f"
# else
# echo "err --> $f";
# fi
# fi
# fi
# fi
# #gotfile $f
# done
###################
# MODO 3
###################
for localizado in $1/*; do
f=$localizado
#f=${localizado:${#path_atual}+1}
#f=$localizado
#echo ${localizado:${#path_raiz}+1}
if [ -d "$f" ] && [ "$f" != "$1" ] ; then
echo "dir --> $f"
gothrudir $f "F"
else
if [ $2 = "F" ]; then
if [ -f $f ]; then
echo "arq --> $f"
else
echo "err --> $f invalido";
fi
fi
fi
done
}

if [ -z $path_raiz ] || [ -z $permissao_diretorio ] || [ -z $permissao_arquivos ] ; then
echo "Todos os campos sao obrigatorios"
else
echo "Processando os arquivos e diretórios... aguarde"

ignorar_arquivos_raiz="T"

gothrudir $path_raiz $ignorar_arquivos_raiz

echo "Atualizado com sucesso."
fi


  


2. Shell Script

Cleber Pereira da Silva
ocleber

(usa Debian)

Enviado em 20/11/2014 - 01:36h

Vamos lá, deixa eu ver se entendi, vc quer aplicar X permissão para todos os arquivos contidos em um diretório, incluindo seus sub diretorios, e aplicar Y permissão para todos os diretórios contido em um diretório e seus subs....

Eu não fiz com loop, usei só linha de comando... então não vou postar todo o script mas acho que vc vai entender, caso não entenda vamos falando...

"fun" será meu diretório de exemplo, ai pode usar variável... assim como o 777

Código para mudar todos os arquivos.

find fun/* -type f | sed 's/ /\\ /g' | xargs chmod 777


Código para mudar todos os diretorios e sub diretorios

find fun/* -type d | sed 's/ /\\ /g' | xargs chmod 777


Testado mesmo com espaços nos nomes.
Resolução do problema do espaco, basta trocar o espaço por \espaco na hora do comando.

Abraços, espero ter entendido e ajudado
be free


3. muito obrigado

Allan
locorj

(usa openSUSE)

Enviado em 24/11/2014 - 11:30h

O comando postado foi bem útil, a única questão que ele não resolveu foi a permissão os arquivos na raiz que não deveria ser alterada. Porém revolvi no script.
segue abaixo abaixo pra quem interessar.

#!/bin/bash
# Script criado por Allan

echo "Informe o diretorio raiz: " ; read path_raiz
echo "Permissao dos diretórios: " ; read permissao_diretorio
echo "Permissao dos arquivos do diretório: " ; read permissao_arquivos

function gothrudir
{
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for f in $1/*
do
if [ -d $f ] && [ $f != $1 ] ; then
#echo "$f"
# mudar arquivos
find "$f"/* -type f | sed 's/ /\\ /g' | xargs chmod $permissao_arquivos

#mudar diretorio e subdiretorios
chmod $permissao_diretorio "$f"
find "$f"/* -type d | sed 's/ /\\ /g' | xargs chmod $permissao_diretorio
#ls -la "$f"
fi
done
}

function is_integer() {
printf "%d" $1 > /dev/null 2>&1
return $?
}

if [ -z $path_raiz ] || [ -z $permissao_diretorio ] || [ -z $permissao_arquivos ] ; then
echo "Todos os campos sao obrigatorios"
else
LEN=$(echo ${#permissao_arquivos})
if is_integer $permissao_arquivos ; then
if [ $LEN == 3 ] && [ ! $permissao_arquivos -gt 777 ]; then
LEN=$(echo ${#permissao_arquivos})
if is_integer $permissao_arquivos ; then
LEN=$(echo ${#permissao_diretorio})
if [ $LEN == 3 ] && [ ! $permissao_diretorio -gt 777 ]; then
echo "Processando os arquivos e diretórios... aguarde"

ignorar_arquivos_raiz="T"

gothrudir $path_raiz $ignorar_arquivos_raiz

echo "Atualizado com sucesso."
else
echo "A permissao de diretório deve ser conter XXX caracteres e ser menor ou igual 777"
fi
else
echo "Permissao diretórios é invalida."
fi
else
echo "A permissao de arquivos deve ser conter XXX caracteres e ser menor ou igual 777"
fi
else
echo "Permissao arquivos é invalida."
fi
fi






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts