Du er her: Hjem --> Annet --> Blog --> Mac: Rekursiv endring av fil/katalog rettigheter

Mac: batch endring av rettigheter i et hierarki

La oss anta en katalog inneholdende filer og andre kataloger. Underkatalogene inneholder igjen filer og kataloger, og så videre, i en dyp struktur med 1000-vis av filer og kataloger. Anta vi ønsker å endre rettighetene på alle filer og kataloger på en enkel måte.

Gi filer og kataloger samme rettigheter

chmod -R 600 .

Problemet her er er at kommandoen ikke skiller mellom filer og kataloger - både filer og kataloger blir 600, og får execute bit slått av. De fleste filer skal ha execute-bit slått av. Men ikke kataloger:

Differensier mellom filer og kataloger

Anta vi ønsker å endre rettighetene på alle filene til 600, mens katalogene skal ha 700.

For å endre rettigheter på alle filene, men ikke katalogene, i et hierarki:

find . -type f -print0 | xargs -0 chmod 600

For å endre rettigheter på alle katalogene, men ikke filene, i et hierarki:

find . -type d -print0 | xargs -0 chmod 700

Macmini

Jeg har benyttet begge kommandoene i et produksjonsmiljø. Katalogen var på omtrent 100GB og det var ca. 100 000 filer og kataloger. Kommandoen tok omtrent 2 minutter på å fullføre, på en middels rask maskin. Sjekk først at ditt system har tilstrekkelige find og xargs implementasjoner.

Macmini'en var fra år 2010, jeg husker ikke de nøyaktige maskin-spesifikasjonene.

Synology

Jeg hadde tilgjengelig en Synology DS1518+ med DSM 5.2-5644 Update 2. Den hadde en Intel Atom C2538 2,4GHz prosessor, 2GB RAM, 8 6-GB disker satt opp i et RAID5. Maskinen støttet de to kommandoene.

Hierarkiet var på 8.7 terrabyte med data, og hadde 772 503 filer og 19 462 kataloger. Dette ble bestemt med kommandoene

du -hd 1 .

find . -type f | wc -l

find . -type g | wc -l

Jeg har ikke noe godt måltall på dybden av hierarkiet, men anta på det meste omtrent 10 katalog-nivåer.

Jeg begynte med å endre owner og group på alle filer og kataloger. Dette ble gjort med kommandoen

chown -R newowner:newgroup /path/to/top/folder

Det tok 45 sekunder å kjøre kommandoen.

Deretter endret jeg rettighetene på alle filene (ikke katalogene) til 660. Kommandoen tok 38 sekunder.

Deretter endret jeg rettighetene på alle katalogene til 770. Kommandoen tok 21 sekunder.

Det virker rimelig å anta at tiden brukes på hierarki-traversering og rettighets-endring. Det virker rimelig å anta at hierarki-traverseringen er den samme for begge kommandoene. Det virker også rimelig å anta at det tar like lang tid å endre rettighetene på en fil som på en katalog. Fra måletallene ser vi at hierarki-traverseringen tok omtrent 20 sekunder, og at det tok omtrent 0.5 sekunder å endre rettighetene på 20 000 filer eller kataloger (mer nøyaktig: 20.56s for traversering, 2.25s for å endre 100 000 fil eller katalogrettigheter).

Vi ser også at det tok mye kortere tid å kjøre disse kommandoene på Synologyen enn på Macmini'en ovenfor.

Referanser

  1. changing chmod for files but not directories
    http://stackoverflow.com/questions/1163294/changing-chmod-for-files-but-not-directories
  2. How to change file permissions for a directory in one command
    http://superuser.com/questions/208606/how-to-change-file-permissions-for-a-directory-in-one-command
Telefon: 67 20 71 21 / 92 60 51 57 Himmel idet regn begynner