Cambiare i permessi a file e directory ricorsivamente

Categoria:
Sistema
Shortlink:
wp.me/p4yd8-sH

Con l’operazione effettuata ieri, ho guadagnato un sacco di spazio dove poter mettere una serie complessa (ma rigorosamente ordinata) di directory e file. Questa serie l’ho prelevata da un vecchio backup su un disco fisso esterno e tutti i permessi erano in 777. Di ripristinare da GUI i permessi corretti non se ne parlava proprio (sono diventato molto pigro, ultimamente…) per cui mi sono cercato il modo per farlo da terminale.

I permessi dovevano essere 755 per le directory e 644 per i file. Il comando chmod 755 -R * non fa distinzione tra file e directory e cambia indistintamente i permessi a ogni cosa; neanche la sintassi chmod 644 -R *.txt ci aiuta perché si ferma solo alla directory dove viene eseguito. Probabilmente con una pipe si potrebbe fare, ma non ho approfondito [1].

Il comando che mi ha aiutato in una frazione di secondo è find (da GUI avrei impiegato qualche ora). Nelle pagine di manuale addirittura è riportato espressamente il comando che serve in questo caso:

find . -type f -exec file '{}' ';'

che nel mio caso diventa

find . -type f -exec chmod 644 '{}' ';'

Vediamo di capire cosa stiamo dicendo al sistema:

trovami (find) in questa directory (.) [2] tutti gli oggetti di tipo file (-type f) quindi esegui il comando (-exec) chmod 644 a ciò che hai trovato ('{}' ';') [3].

Per le directory il comando cambia in questo modo:

find . -type d -exec chmod 755 '{}' ';'

Io rimango sempre meravigliato della potenza del terminale, non so voi…


[1] Magari Shaytan di Linux e dintorni ci saprebbe dire di più.

[2] E find va anche nelle sottodirectory.

[3] Da notare le virgolette singole che forzano il sistema a non interpretare quei simboli come punteggiatura. Il punto e virgola finale chiude gli argomenti per il comando eseguito (chmod). Si potrebbe usare al posto delle virgolette anche il backslash, per cui il comando verrebbe:

find . -type f -exec chmod 644 \{\} \;
Come mi aspettavo, alcuni lettori del blog hanno inviato nei commenti altri metodi per fare la stessa cosa. Li riporto qui e li ringrazio per il prezioso contributo:

  • fazen suggerisce:

    find . -type f -print0 | xargs -0 chmod 644
    find . -type d -print0 | xargs -0 chmod 755
  • CDF suggerisce:
    chmod -R a=rw,go=r,+X .

10 commenti a “Cambiare i permessi a file e directory ricorsivamente”

  1. luimors scrive:

    alcuni confondono il terminale unix con il dos ms…pensando che piu o meno siano la stessa cosa (con comandi diversi).

    da quando uso linux (circa un anno continuativo) nonostante non abbia mai approfondito molto, ho certamente capito la straordinaria potenza dei sistemi unix e del terminale; che nulla ha lontanamente a che vedere con il poverissimo e limitato dos.

  2. blackout scrive:

    “chmod -R” dovrebbe fare la stessa cosa (ricorsivo)

Lascia un commento

La tua email non verrà mai resa pubblica. I campi obbligatori sono marcati con *.

Linee guida per il commento.
Se hai una richiesta di supporto tecnico, serviti del forum.

Sorriso Occhiolino Compiaciuto Soddisfatto Risata Figo Bacio Linguaccia Innocente Neutrale Indeciso Mr. Green! Imbarazzato Triste Preoccupato Shock Piange Arrabbiato Cattivo Scimmia Idea! Domanda Importante Freccia

Feed RSS dei commenti all'articolo.

Iscriviti senza lasciare un commento