Cambiare i permessi ricorsivamente: differenze tra le versioni

m
aggiunto motivo
m (aggiunta piccola descrizione)
m (aggiunto motivo)
 
(20 versioni intermedie di 7 utenti non mostrate)
Riga 1: Riga 1:
{{Da_cancellare|Sostituibile con l'esecuzione di un singolo chmod, si veda [[Discussione:Cambiare_i_permessi_ricorsivamente | qui]].}}
{{Versioni compatibili}}
__TOC__
== Descrizione ==
Questo script cambia ricorsivamente i permessi di file e directory, ma impostando permessi diversi per i file e per le directory. In tal modo si possono impostare con un solo comando i permessi di esecuzione di un'intera gerarchia di directory (in modo da potervi accedere) e contemporaneamente togliere il permesso di esecuzione a tutti i file ivi contenuti.
Questo script cambia ricorsivamente i permessi di file e directory, ma impostando permessi diversi per i file e per le directory. In tal modo si possono impostare con un solo comando i permessi di esecuzione di un'intera gerarchia di directory (in modo da potervi accedere) e contemporaneamente togliere il permesso di esecuzione a tutti i file ivi contenuti.


Riga 5: Riga 11:
{{Box|Esempio|Un utilizzo tipico è quello di sanare i permessi di file copiati da cdrom, da partizioni windows, da chiavette usb formattate fat32 etc. }}
{{Box|Esempio|Un utilizzo tipico è quello di sanare i permessi di file copiati da cdrom, da partizioni windows, da chiavette usb formattate fat32 etc. }}


I due parametri opzionali sono i permessi rispettivamente di file e cartelle nello stesso formato accettato da chmod. Un terzo parametro opzionale indica una directory di partenza diversa da quella corrente.<br/>
Ad esempio:
<pre>
$ cd cartella/da/modificare/
$ chmodr g-wx g-w
</pre>
In ultimo, il seguente comando:
<pre>
$ chmodr -h
</pre>
mostra una schermata di help.


I due parametri opzionali sono i permessi rispettivamente di file e cartelle nello stesso formato accettato da chmod.
== Script ==
 
Lo script:
{{Box|Esempio| $ cd cartella/da/modificare/
$ chmodr g-wx g-w
}}
 
 
Ecco lo script:
<pre>
<pre>
#!/bin/bash
#!/bin/bash
#
#
# Antonio Ingargiola - 2004
# chmodr - Un chmod Ricorsivo, che rispetta le differenze file-directory
#
# chmodr - Un chmod Ricorsivo, che rispetta le differenze file-directory
#
# Cambia ricorsivamente i permessi di file e directory, ma impostando
# permessi diversi per i file e per le directory
#
# USO
# ^^^
#
# chmodr
#  Senza parametri imposta ad un sano default tutti i file (640) e alle
#  directory (750) contenute nella directory corrente.
#  
#  
# chmodr permessi_file permessi_dir
# Copyright (C) 2004, 2006 - Antonio Ingargiola <debian@fastwebnet.it>
#  Applica ai file nella directory corrente e sotto-directory i
#
#   'permessi_file' e tutte le directory i 'permessi_dir'. La sintassi
# Released under the GNU GENERAL PUBLIC LICENSE.
#   per i permessi e' la stessa di chmod quindi sia ottale che simbolica.
#
#


help () {
help () {
  echo -e "\n    Antonio Ingargiola - 2004\n"
    cat << EOF
  echo -e "  chmodr - Un chmod Ricorsivo, che rispetta le differenze file-directory\n"
 
  echo -e "  Cambia ricorsivamente i permessi di file e directory, ma impostando"
  chmodr - Un chmod Ricorsivo, che rispetta le differenze file-directory
  echo -e "  permessi diversi per i file e per le directory.\n"
                                                                         
  Copyright (C) 2004, 2006 - Antonio Ingargiola <debian@fastwebnet.it>
  echo -e "  USO"
 
  echo -e " ^^^\n"
  Released under the GNU GENERAL PUBLIC LICENSE.
  echo -e "  chmodr"
 
  echo -e "    Senza parametri imposta ad un sano default tutti i file (640) e alle "
 
  echo -e "    directory (750) contenute nella directory corrente.\n"
  DESCRIZIONE
 
 
  echo -e "  chmodr permessi_file permessi_dir"
  Cambia ricorsivamente i permessi di file e directory, ma impostando  
  echo -e "    Applica ai file nella directory corrente e sotto-directory i "
  permessi diversi per i file e per le directory. Nella ricorsione non
  echo -e "    'permessi_file' e tutte le directory i 'permessi_dir'. La sintassi"
  segue link simbolici a directory.
  echo -e "    per i permessi e' la stessa di chmod quindi sia ottale che simbolica.\n"
 
  exit 1
 
  USO
   
  chmodr
    Senza parametri, partendo dalla directory corrente imposta i permessi
    640 (- rw- r-- ---) a tutti i file e 750 (- rwx r-x ---) a tutte le
    sotto-directory.
  chmodr permessi_file permessi_dir
    Applica ai file nella directory corrente e sotto-directory i  
    'permessi_file' e tutte le directory i 'permessi_dir'. La sintassi
    per i permessi è la stessa di chmod quindi sia ottale (es. 640) che  
    simbolica (es. o-rwx).
 
  È possibile specificare un terzo parametro opzionale che indica una
  directory iniziale diversa da quella corrente.
 
EOF
    exit 1
}
}


valid_mod () {
valid_mod () {
# Check if the mods are syntactically correct
# Controlla che i permessi siano sintatticamente corretti
      
      
     echo "$1" |\
     echo "$1" |\
Riga 84: Riga 100:


if !( valid_mod $FILE_MOD && valid_mod $DIR_MOD ); then
if !( valid_mod $FILE_MOD && valid_mod $DIR_MOD ); then
     echo -e "\n ERRORE: Il formato dei permessi e' sbagliato. Per i dettagli"
     echo -e "\n ERRORE: Il formato dei permessi è errato. Per i dettagli"
     echo -e "        vedere la pagina di manuale di chmod.\n"
     echo -e "        vedere la pagina di manuale di chmod.\n"
     exit 2
     exit 2
Riga 90: Riga 106:


ls | while read file; do
ls | while read file; do
     if [ -d "$file" ]; then
     if [ -L "$file" ]; then
        echo "  ==>> '$file' è un link simbolico, lo ignoro."
continue
    elif [ -d "$file" ]; then
echo " Entro nella directory '$file'"
echo " Entro nella directory '$file'"
chmod u+rwx "$file" 2> /dev/null ||\
chmod u+rwx "$file" 2> /dev/null ||\
{ echo " Non ho i permessi per entrare in '$file'"; continue; }
{ echo " Non ho i permessi per entrare in '$file'"; continue; }
cd "$file"; $0 $@; cd -
cd "$file"; $0 $@; cd - > /dev/null
chmod $DIR_MOD "$file" && echo -e " Directory '$file' impostata.\n"
chmod $DIR_MOD "$file" && echo -e " Directory '$file' impostata.\n"
     elif [ -f "$file" ]; then
     elif [ -f "$file" ]; then
echo -n " $file ... "
echo -n "   $file ... "
chmod $FILE_MOD "$file" && echo " [ OK ]"
chmod $FILE_MOD "$file" && echo " [ OK ]"
     else
     else
echo " Ignoro '$file', probabilmente un link."
echo " Ignoro '$file'."
     fi
     fi
done
done
</pre>
</pre>


Il core dell script (quello che esegue effettivamente il cambio dei permessi) è la parte finale da '''ls | while read ...''' in poi. Tutta la parte precedente serve solo a controllare la correttezza dei parametri passati e a stampare una eventuale schermata di help.
Il core dell script (quello che esegue effettivamente il cambio dei permessi) è la parte finale, da <code>ls | while read ...</code> in poi. Tutta la parte precedente serve solo a controllare la correttezza dei parametri passati e a stampare una eventuale schermata di help.
----
 
Autore: [[Utente:TheNoise|~ The_Noise]]
== Changelog ==
* Release iniziale
* Aggiunto un check esplicito per evitare di seguire i link simbolici
* Cambiato header e funzione help()
 
{{Autori
|Autore = [[Utente:TheNoise|~ The_Noise]]
}}
 
[[Categoria:Bash Scripting]]
3 581

contributi