Portál AbcLinuxu, 4. května 2025 22:58

Dotaz: Hromadná změna přístupových práv

21.3.2007 18:55 bigfood | blog: Finesa
Hromadná změna přístupových práv
Přečteno: 3651×
Odpovědět | Admin
Zdravím, potřeboval bych jakkýkoliv program (stačil by i třebas script v bashi), který by uměl změnit přístupová práva složky a všech jejich podsložek a podsouborů. Toto už samo o sobě umí např. KDE, jenže já potřebuji, aby práva pro všechny podsložky byla 755 a pro všechny podsoubory zase 644. Existuje nějaký takovýto program? Ušetřil by mi mnohdy dost času
Nástroje: Začni sledovat (3) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

21.3.2007 19:05 slano | skóre: 5
Rozbalit Rozbalit vše Re: Hromadná změna přístupových práv
Odpovědět | | Sbalit | Link | Blokovat | Admin
ak chmodu das ako paramter +X pochopi to tak aby dane pravo nastavil iba ak je to adresar
21.3.2007 19:46 bigfood | blog: Finesa
Rozbalit Rozbalit vše Re: Hromadná změna přístupových práv
Zkoušel jsem to pomocí toho modifikátoru X, ale nefungovalo mi to správně. Nastavovalo mi to hodnoty nejen pro adresáře, ale i pro soubory. Našel jsem však tyto spolehlivé skripty na http://en.wikipedia.org/wiki/Chmod:

Nastaví všem složkám včetně podsložek ve složce path/ práva na 755 (rwx r-x r-x)
$find path/ -type d -exec chmod 0755 {} \;
Nastaví všem souborům včetně podsouborů ve šložce path/ práva na 644 (rw- r-- r--)
$find path/ -type f -exec chmod 0644 {} \;
21.3.2007 19:50 finn | skóre: 43 | blog: finnlandia | 49° 44´/13° 22´
Rozbalit Rozbalit vše Re: Hromadná změna přístupových práv
#!/bin/bash 

find ${1} -type f -print0 | xargs -0 chmod 644
find ${1} -type d -print0 | xargs -0 chmod 755
Užívej dne – možná je tvůj poslední.
Fuky avatar 22.3.2007 10:07 Fuky | skóre: 52 | blog: 4u
Rozbalit Rozbalit vše Re: Hromadná změna přístupových práv

Chyba, parametr +X nastaví x je-li soubor adresář nebo je-li již alespoň u jednoho z user, group, other toto právo nastaveno ;-)

21.3.2007 23:35 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: Hromadná změna přístupových práv
Odpovědět | | Sbalit | Link | Blokovat | Admin
Udělal jsem pár pokusů na hojně rozvětveném adresáři s cca 50000 položkami. Zatímco konstrukce find-exec-chmod běží asi minutu a půl, tak finnova varianta find-xargs-chmod to zvládne asi za dvě sekundy!
Zkusil jsem napsat něco, co projde celý strom pouze jednou, na každou položku pouštět stat() pouze jednou, měnit práva jen když je to potřeba a algoritmus bude iterativní místo rekurzivní.
#!/usr/bin/env python
import os, stat, sys

def chmod_r(directory, filemode, dirmode):
    queue = [directory]
    while queue:
        rootdir = queue.pop()
        for diritem in os.listdir(rootdir):
            itempath = os.path.join(rootdir, diritem)
            itemstat = os.lstat(itempath)
            if stat.S_ISDIR(itemstat.st_mode):
                queue.append(itempath)
                reqmode = dirmode
            elif stat.S_ISREG(itemstat.st_mode):
                reqmode = filemode
            else: continue

            if reqmode != stat.S_IMODE(itemstat.st_mode):
                os.chmod(itempath, reqmode)

filemode = 0644
dirmode = 0755

chmod_r(sys.argv[1], filemode, dirmode)
Ale je to rychlejší jen asi o třetinu a při menším počtu souborů se situace obrací. find-xargs-chmod je zatraceně dobře vyladěná kombinace.
22.3.2007 15:24 bigfood | blog: Finesa
Rozbalit Rozbalit vše Re: Hromadná změna přístupových práv
Díky moc, již používám finnovu metodu. Edituji též wikipedii, ať je tam i pro ostatní rychlejší řešení.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.