Hvordan chmod 755 alle kataloger, men ingen fil (rekursivt)?
Omvendt, hvordan chmod bare filer (rekursivt), men ingen katalog?
For rekursivt å gi kataloger lese- og kjørerettigheter:
find /path/to/base/dir -type d -exec chmod 755 {} +
For rekursivt å gi filer leserettigheter:
find /path/to/base/dir -type f -exec chmod 644 {} +
Eller hvis det er mange objekter som skal behandles:
chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)
Eller, for å redusere chmod
gyting:
find /path/to/base/dir -type d -print0 | xargs -0 chmod 755
find /path/to/base/dir -type f -print0 | xargs -0 chmod 644
En vanlig årsak til denne typen ting er å sette kataloger til 755, men filer til 644. I dette tilfellet er det en litt raskere måte enn nik's find
eksempel:
chmod -R u+rwX,go+rX,go-w /path
Betydning:
-R
= rekursivt;u+rwX
= brukere kan lese, skrive og utføre;go+rX
= gruppen og andre kan lese og utføre;go-w
= gruppere og andre kan ikke skrive.Det viktige å merke seg her er at X
med store bokstaver fungerer annerledes enn x
med små bokstaver. I manuell kan vi lese:
Kjøre/søkebitene hvis filen er en katalog eller noen av kjøre/søkebitene er satt i original (umodifisert) modus.
Med andre ord, chmod u + X på en fil vil ikke sette utførelsesbiten; og g + X vil bare sette den hvis den allerede er satt for brukeren.
Hvis du vil forsikre deg om at filene er satt til 644 og det er filer i banen som har kjøringsflagget, må du fjerne kjøringsflagget først. +X fjerner ikke kjøringsflagget fra filer som allerede har det.
Eksempel:
chmod -R ugo-x,u+rwX,go+rX,go-w path
Oppdatering: Dette ser ut til å mislykkes fordi den første endringen (ugo-x) gjør katalogen ukjørbar, slik at alle filene under den ikke blir endret.