Può capitare di avere una struttura con sottocartelle e file contenute in essi e dover impostare i permessi a tutti i file (o le cartelle) di un certo tipo. Facciamo un esempio: vogliamo impostare i permessi a 755 a tutte le immagini. L’errore più comune è quello di utilizzare chmod in modalità ricorsiva in questo modo:

chmod -R 755 *.jpg

Dopo aver lanciato questo comando vi accorgerete che sono cambiati solo i permessi dei file nella cartella principale e quelli nelle sottocartelle invece no.

Vediamo perché e come ottenere il risultato voluto.

Quando si filtra chmod con un nome di file (nel nostro caso *.jpg) lui fa il check con tutto ciò che incontro, sia file che cartelle. Ciò significa che, tranne nel caso in cui abbiate una cartella che finisce con .jpg, le sottocartelle non verranno analizzate (e quindi attraversate) perché non matchano il nome passato a chmod.

Per ottenere il comportamento voluto si può semplicemente togliere il filtro ma a questo punto cambieremmo i permessi a tutti i file/cartelle contenuti nella cartella principale:

chmod -R 755

L’altra soluzione, molto più fine, è quella di usare find in questo modo:

find . -type f -name ‘*.jpg’ -exec chmod 755 {} \;

Analizziamo i parametri:

  • il . iniziale serve per dire che la scansione di file dovrà iniziare dalla cartella corrente;
  • -type f indica che vogliamo cercare solo i file (usate d se volete le cartelle);
  • -name ‘*.jpg’ filtra i nomi dei file (in questo caso immagini jpg);
  • -exec dice che vogliamo eseguire un comando sui file che rispettano i nostri requisiti;
  • chmod 755 {} è il comando vero e proprio per cambiare i permessi;
  • lo \ finale indica che il comando è finito.

Ecco fatto! Usatelo con attenzione…