Repository 32bit  Forum
Repository 64bit  Wiki

Rendere le directory eseguibili

Da Slacky.eu.

Descrizione

Questo script rende tutte le directory eseguibili o non eseguibili in modo ricorsivo (Serve specialmente quando abbiamo sbagliato a giocare con chmod).

Download

http://www.slacky.eu/misto/concorso/nitrogl/dirx.sh

Script

#!/bin/bash
# ======================================================================
#    Data : Cagliari, 14 october 2007
#  Autore : Roberto Paolo Antonio Metere
# ======================================================================
#
# Questo script rende tutte le directory eseguibili o non eseguibili
# in modo ricorsivo
#
# (Serve specialmente quando abbiamo sbagliato a giocare con chmod)
#
dir=""
permtype=""
firstp="false"
verbose=0
arg[0]="$0"
arg[1]="$1"
arg[2]="$2"
arg[3]="$3"
arg[4]="$4"

# Permessi
permissions="u+ g+ o+ ug+ gu+ go+ og+ uo+ ou+ ugo+ uog+ oug+ ogu+ gou+ guo+ a+ u- g- o- ug- gu- go- og- uo- ou- ugo- uog- oug- ogu- gou- guo- a-"
numpermissions=0
for i in $permissions
do
  numpermissions=$(($numpermissions + 1))
done

# Funzione degli errori (TORNA NELLA SHELL se ci sono errori)
Error ()
{
error_code="$1"
ERRORS[0]="nessun errore"
ERRORS[1]="hai dato troppi argomenti"
ERRORS[2]="non hai dato nessun argomento"
ERRORS[3]="tipo di permessi errato o directory specificata non esistente"
ERRORS[4]="tipo di permessi omesso"

if [ "$error_code" -gt 0 ]
then

# Stampa gli errori interni e l'uso dello script
  printf "\n ERRORE: ${ERRORS[$error_code]}."
  printf "\n Sintassi: ${arg[0]} [-v] [directory] tipodipermessi\n"
  printf "\n               -v : se vuoi che lo script scriva qualcosa"
  printf "\n                    puo' solamente essere il primo argomento\n"
  printf "\n        directory : directory di destinazione. Puoi omettere"
  printf "\n                    la directory: quella di default e' quella"
  printf "\n                    corrente. Va PRIMA del tipodipermessi.\n"
  printf "\n   tipodipermessi : puo' essere uno dei seguenti:"
  printf "\n                    u+ g+ o+ ug+ gu+ go+ og+ uo+ ou+ ugo+"
  printf "\n                    uog+ oug+ ogu+ gou+ guo+ a+ u- g- o-"
  printf "\n                    ug- gu- go- og- uo- ou- ugo- uog- oug-"
  printf "\n                    ogu- gou- guo- a-"
  printf "\n                    Dove u significa utente"
  printf "\n                         g significa gruppo"
  printf "\n                         o significa altri"
  printf "\n                         a significa tutti (ugo)"
  printf "\n                         + significa eseguibile"
  printf "\n                         - significa non eseguibile\n\n"


# Esci
  exit 1

else
  printf "\n ERRORE: ${ERRORS[$error_code]}.\n\n"
fi
}

# Se vogliamo che il programma produca delle scritte in output scriviamo -v come primo argomento
if [ "${arg[1]}" == "-v" ]
then
  verbose=1
  arg[1]="${arg[2]}"
  arg[2]="${arg[3]}"
  arg[3]="${arg[4]}"
fi

# Schermata di benvenuto
if [ "$verbose" -eq "1" ]
then
  printf "\n ============================================================="
  printf "\n   Rende eseguibili le directory ricorsivamente - by NitroGL "
  printf "\n =============================================================\n\n"
fi

# Controlla il terzo argomento (troppi argomenti)
if [ "${arg[3]}" != "" ]
then
  Error 1
fi

# Controlla il primo argomento
if [ "${arg[1]}" != "" ]
then
  if test -d "${arg[1]}"
  then

    if [ "$verbose" -eq "1" ]
    then
      printf "\n Primo argomento accettato: directory" # verboso
    fi

    dir="${arg[1]}"
    firstp="false"

  else
    i=1
    while [ "$i" -le "$numpermissions" ]
    do
      if [ "${arg[1]}" == "`echo "$permissions" | awk '{print $'$i'}'`" ]
      then

        if [ "$verbose" -eq "1" ]
        then
          printf "\n Primo argomento accettato: permesso"
        fi

        permtype="${arg[1]}"x
        firstp="true"
        i=$(($numpermissions + 1))
      fi
      i=$(($i + 1))
    done

    if [ "$permtype" == "" ]
    then
      Error 3
    fi
  fi
else
  Error 2
fi

# Controlla il secondo argomento
if [ "$firstp" == "false" ]
then
  i=1
  while [ "$i" -le "$numpermissions" ]
  do
    if [ "${arg[2]}" == "`echo "$permissions" | awk '{print $'$i'}'`" ]
    then

      if [ "$verbose" -eq "1" ]
      then
        printf "\n Secondo argomento accettato: permesso"
      fi

      permtype="${arg[2]}"x
      i=$(($numpermissions + 1))
    fi
    i=$(($i + 1))
  done

  if [ "$permtype" == "" ]
  then
    Error 4
  fi

else
  if [ "${arg[2]}" != "" ]
  then
    Error 1
  fi
fi

# Impostazione della directory a "." se nessuna specificata
if [ "$dir" == "" ]
then
  dir="."

  if [ "$verbose" -eq 1 ]
  then
    printf "\n Directory di default: directory corrente"
  fi
fi

# Se tutto va bene, al lavoro! (due righe...)
chmod "$permtype" "$dir";
find "$dir" -type d -exec chmod "$permtype" {} \;

if [ "$verbose" -eq "1" ]
then
  Error 0
fi

exit 0
#
# Copyright (c) Roberto Metere
  • Data: 21/10/2007
  • Autore: Nitrogl
Strumenti personali
Namespace

Varianti