Özyinelemeli bir chmod'u yalnızca dizinlerde nasıl yapabilirim?


31

Centos 4'teki bir ağaçtaki izinleri, tüm dizinlerin yürütme izinlerini tekrarlı olarak bir dizinden eklemek istiyorum. Normal chmod kullanırsam, dizin dışındaki dosyalar da değiştirilir:

chmod -R o+x /my/path/here

Sadece dizinleri nasıl etkileyebilirim?

Yanıtlar:


48

Run findüzerinde -type d( dizinleri ile birlikte) -execgerçekleştirmek için birincil chmodklasörleri sadece:

find /your/path/here -type d -exec chmod o+x {} \;

Bunu yalnızca istenen nesneler üzerinde gerçekleştirdiğinden emin olmak için, find /your/path/here -type dilk önce çalıştırabilirsiniz ; basitçe bulduğu dizinleri basacaktır.


Neyi açıklayabilir misiniz {} \; yapar?
Srekel


17

Bkz Komut satırı örnekleri - chmod Wikipedia.

chmod -R a-x+X directory    remove the execute permission on all files in 
                            a directory tree, while allowing for directory browsing.

Daniel tarafından eklendiği gibi: bu sizin durumunuzda işe yarayacak:

chmod -R o+X directory

Bu, dizinlerdeki dosyaların geçerli izinlerini etkiler.
scriptmonster

@ scriptmonster alıntı bu durumda yanlış, ancak chmod -R o+X directoryOP için çalışması gerekir.
Daniel Beck

1
Fark hakkında merak olanlar için, benim gibi, bu X'in olmasıdır de zaten kümesi bit zaten bir çalıştırma izni en az olan herhangi bir dosyaya (ister kullanıcı, grup veya diğerleri) yürütme izinleri geçerlidir. Genel durumda kabul edilen cevap daha iyidir.
ixe013

1
find /home/mydir -type d | xargs chmod ugo+rx

Bu, yukarıda -exec'in bulamadığı CentOS6'da çalışır. Temelde, dizin listesini sadece chmod'a gönderen xargs komutuna yönlendirir. Chmod daha sonra dizinler üzerinde evrensel okuma ve çalıştırma (arama) özelliğini ayarlar. Bunu evdeki tüm kullanıcılar için yapmak için sudo kullanın:

sudo sh -c "find /home/ -type d | xargs chmod ugo+rx"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.