3 581
contributi
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. | |||
== Script == | |||
Lo script: | |||
<pre> | <pre> | ||
#!/bin/bash | #!/bin/bash | ||
# | # | ||
# | # chmodr - Un chmod Ricorsivo, che rispetta le differenze file-directory | ||
# | # | ||
# | # Copyright (C) 2004, 2006 - Antonio Ingargiola <debian@fastwebnet.it> | ||
# | |||
# | # Released under the GNU GENERAL PUBLIC LICENSE. | ||
# | |||
# | # | ||
help () { | help () { | ||
cat << EOF | |||
chmodr - Un chmod Ricorsivo, che rispetta le differenze file-directory | |||
Copyright (C) 2004, 2006 - Antonio Ingargiola <debian@fastwebnet.it> | |||
Released under the GNU GENERAL PUBLIC LICENSE. | |||
DESCRIZIONE | |||
Cambia ricorsivamente i permessi di file e directory, ma impostando | |||
permessi diversi per i file e per le directory. Nella ricorsione non | |||
segue link simbolici a directory. | |||
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 () { | ||
# | # 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 | 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 " | echo -n " $file ... " | ||
chmod $FILE_MOD "$file" && echo " [ OK ]" | chmod $FILE_MOD "$file" && echo " [ OK ]" | ||
else | else | ||
echo " Ignoro '$file' | 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 | 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 | == 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]] |
contributi