Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: vlabra 26 Června 2010, 00:16:40
-
Zdravím,
zkopíroval jsem hromadu souborů v dost velké adresářové struktuře z FAT oddílu a všechny soubory mají nastaven spouštěcí atribut. To samozřejmě ztrochu otravuje při otvírání z Nautilu, protože se místo přímého spuštění asociované aplikace zobrazí dialog co se souborem chci dělat. A navíc je to i potenciální bezpečnostní riziko (ne že bych tomu nevěřil, ale člověk nikdy neví)
Pokoušel jsem se X atributy odstranit ale zatím se nedaří (ručně to je unreal, opravdu moc podadresářů, podpodadresářů, ...)
První co mě samozřejmě napadlo bylo:
[b]chmod -R -x *[/b]
To ale odebere X atribut i u adresářů a ty pak nejdou procházet
Další co mne napadlo bylo:
[b]chmod -x `ls -R`[/b]
Ale to nefunguje, protože ls -R jednak vypisuje taky všechno a navíc výstup je přehledný, ale pro "automatizaci" trochu nepoužitelný
Pomůže mi prosím s tím někdo?
-
Já bych to zkusil takto:
find -type f -exec chmod -x "{}" \;
-
Na opravu práv som si urobil script:
cat ~/bin/mod
#!/bin/sh
find -type d -print0 | xargs -0 chmod 0755
find -type f -print0 | xargs -0 chmod 0644
Opravené práva zodpovedajú štandardnému umask 0022
Pozor - spúšťať iba v adresároch s dátami - určite nie v home adresári.
-
Díky moc,
použil jsem:
find -type f -print0 | xargs -0 chmod -x
-
Díky moc,
použil jsem:
find -type f -print0 | xargs -0 chmod -x
Což je přesně to samé, co jsem radil já, ale zbytečně ve dvou příkazaech ;)
-
Nie je to to isté a určite nie zbytočné ;)
Ak máme 10000 súborov
find -type f -exec chmod -x "{}" \;
Find pre každý nájdený súbor spustí chmod - teda 10000x
find -type f -print0 | xargs -0 chmod -x
Find vyrobí zoznam súborov, odovzdá ho cez pipe chmod ktorý im upraví parametre - chmod sa spustí 1x
Fork programu je relatívne náročný na zdroje. Pravidelne robím md5 sumy cez find. Ak je veľa drobných súborov rozdiel behu scriptu
find -type f -exec md5sum -b "{}" \; > /tmp/suma.md5
a
find -type f -print0 | xargs -0 md5sum -b > /tmp/suma.md5
je dosť veľký. Hlavne pri zaťaženom systéme.
Ak mám notebook iba pre seba je to asi jedno, ale prečo neurobiť script efektívnejšie :).
-
Hm, zajímavá debata. Nejsem v tom kovaný, ale pokud ti přijde, že je škoda spouštět další proces, pak by mělo stačit prosté
find -type f -exec chmod -x "{}" \+
a ušetříš ještě jeden proces navíc (xargs + pipe), nebo ne?
Jinak u mě rozdíl mezi xargs a ne-xargs dělá cca 10%root@lucid-lean:~# sync && echo 3 > /proc/sys/vm/drop_caches
root@lucid-lean:~# time find ~/data/music/ -type f -exec md5sum -b "{}" \; > /tmp/suma.md5
real 0m34.326s
user 0m5.780s
sys 0m5.016s
root@lucid-lean:~# sync && echo 3 > /proc/sys/vm/drop_caches
root@lucid-lean:~# time find ~/data/music -type f -print0 | xargs -0 md5sum -b > /tmp/suma2.md5
real 0m30.903s
user 0m4.412s
sys 0m2.376s
root@lucid-lean:~# sync && echo 3 > /proc/sys/vm/drop_caches
root@lucid-lean:~# time find ~/data/music/ -type f -exec md5sum -b "{}" \+ > /tmp/suma3.md5
real 0m31.178s
user 0m4.240s
sys 0m2.524s
-
Nie je to to isté a určite nie zbytočné ;)
Ak máme 10000 súborov
...
Občas zkrátka blbnu, ta arrangeho verze je to pravé.
Udělal jsem pro ilustraci test na 71 254 souborech, přesně podle zadání tohoto vlákna:
Můj původní příkaz:
real 1m30.668s
user 0m43.775s
sys 0m43.507s
A arrange s fishem vyjdou celkem logicky na stejno:
real 0m0.933s
user 0m0.140s
sys 0m0.772s