Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Jak odstranint spouštěcí atribut souborů v podadresářích?  (Přečteno 1841 krát)

vlabra

  • Návštěvník
  • Příspěvků: 75
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:
Kód: [Vybrat]
[b]chmod -R -x *[/b]To ale odebere X atribut i u adresářů a ty pak nejdou procházet

Další co mne napadlo bylo:
Kód: [Vybrat]
[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?
« Poslední změna: 26 Června 2010, 01:50:34 od vlabra »

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3176
    • GdH-Notes
Re: Jak odstranint spouštěcí atribut souborů v podadresářích?
« Odpověď #1 kdy: 26 Června 2010, 10:02:15 »
Já bych to zkusil takto:
Kód: [Vybrat]
find -type f -exec chmod -x "{}" \;

fish

  • Aktivní člen
  • *
  • Příspěvků: 307
Re: Jak odstranint spouštěcí atribut souborů v podadresářích?
« Odpověď #2 kdy: 26 Června 2010, 10:26:44 »
Na opravu práv som si urobil script:
cat ~/bin/mod
Kód: [Vybrat]
#!/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.
« Poslední změna: 26 Června 2010, 10:35:48 od fish »
Acer Aspire 5738ZG/Intel T4400/ATI MR HD 4650/4GB RAM :: Ubuntu 10.04 64bit/Kbuntu 10.10 64bit/Win7 HP 64bit

vlabra

  • Návštěvník
  • Příspěvků: 75
Re: Jak odstranint spouštěcí atribut souborů v podadresářích?
« Odpověď #3 kdy: 26 Června 2010, 12:18:30 »
Díky moc,
použil jsem:
Kód: [Vybrat]
find -type f -print0 | xargs -0 chmod -x

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3176
    • GdH-Notes
Re: Jak odstranint spouštěcí atribut souborů v podadresářích?
« Odpověď #4 kdy: 26 Června 2010, 13:58:59 »
Díky moc,
použil jsem:
Kód: [Vybrat]
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 ;)

fish

  • Aktivní člen
  • *
  • Příspěvků: 307
Re: Jak odstranint spouštěcí atribut souborů v podadresářích?
« Odpověď #5 kdy: 26 Června 2010, 18:33:32 »
Nie je to to isté a určite nie zbytočné ;)
Ak máme 10000 súborov
Kód: [Vybrat]
find -type f -exec chmod -x "{}" \;
Find pre každý nájdený súbor spustí chmod - teda 10000x

Kód: [Vybrat]
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
Kód: [Vybrat]
find -type f -exec md5sum -b "{}" \; > /tmp/suma.md5a
Kód: [Vybrat]
find -type f -print0 | xargs -0 md5sum -b > /tmp/suma.md5je 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 :).
Acer Aspire 5738ZG/Intel T4400/ATI MR HD 4650/4GB RAM :: Ubuntu 10.04 64bit/Kbuntu 10.10 64bit/Win7 HP 64bit

arrange

  • Závislák
  • ***
  • Příspěvků: 4031
  • "jdu s hlavou vztyčenou..."
Re: Jak odstranint spouštěcí atribut souborů v podadresářích?
« Odpověď #6 kdy: 26 Června 2010, 20:31:08 »
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é
Kód: [Vybrat]
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%
Kód: [Vybrat]
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
http://www.openstreetmap.org - mapy celého světa "wiki style"

GdH

  • Moderátor
  • Závislák
  • ***
  • Příspěvků: 3176
    • GdH-Notes
Re: Jak odstranint spouštěcí atribut souborů v podadresářích?
« Odpověď #7 kdy: 26 Června 2010, 22:20:57 »
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:
Kód: [Vybrat]
real 1m30.668s
user 0m43.775s
sys 0m43.507s

A arrange s fishem vyjdou celkem logicky na stejno:
Kód: [Vybrat]
real 0m0.933s
user 0m0.140s
sys 0m0.772s




 

Provoz zaštiťuje spolek OpenAlt.