Chmod yinelemeli olarak
Başkası tarafından arşivlenmiş olan bir arşiv var, ve çıkarılan dosyaları okuma erişim içinde ben indirdikten sonra otomatik olarak dosya sisteminin bir kolu değiştirmek istiyorum. (Arşiv oluşturulur nasıl değiştiremem).
Bu konuyu araştırdım: bazıları, ama hiçbir sevinç chmod: How to recursively add execute permissions only to files which already have execute permission.
Dizinler aslında birden çok ama çok yanlış bayrakları ile gelin gibi görünebilir:
drwx------
d---r-x---
drwxrwxr-x
dr--r-xr--
O sadece şimdiye kadar keşfettiğim en az, ama daha fazla olabilir.
find
x
- izni olmadan bir dizine bakmaya çalışır hataları ve chmod
geçmek bilmiyor. Şimdiye kadar yapmaya çalıştım el ile ana dizin izinlerini değiştirmek, sonra alt dizinlere gidip aynı şeyi onlar için. Ama bu el emeği bir çok şey var. Orada bir şekilde bunu otomatik olarak yapmak için değil mi?
I. e. şimdi ne yapıyorum:
yapın:
$ chmod -R x
$ chmod -R r
hata alana kadar, o zaman
$ find -type f -exec chmod -x {}
Ama daha iyi bir yolu olmalı.
CEVAP
Dizinler yalnızca yürütülebilir bayrağını ayarlamak için X
mod harfi (sermaye X) ile chmod kullanabilirsiniz.
Yürütülebilir bayrağı altında örnek temizledi ve sonra da tüm dizinleri özyinelemeli olarak: için ayarlanır
~$ mkdir foo
~$ mkdir foo/bar
~$ mkdir foo/baz
~$ touch foo/x
~$ touch foo/y
~$ chmod -R go-X foo
~$ ls -l foo
total 8
drwxrw-r-- 2 wq wq 4096 Nov 14 15:31 bar
drwxrw-r-- 2 wq wq 4096 Nov 14 15:31 baz
-rw-rw-r-- 1 wq wq 0 Nov 14 15:31 x
-rw-rw-r-- 1 wq wq 0 Nov 14 15:31 y
~$ chmod -R go X foo
~$ ls -l foo
total 8
drwxrwxr-x 2 wq wq 4096 Nov 14 15:31 bar
drwxrwxr-x 2 wq wq 4096 Nov 14 15:31 baz
-rw-rw-r-- 1 wq wq 0 Nov 14 15:31 x
-rw-rw-r-- 1 wq wq 0 Nov 14 15:31 y
Açıklaması biraz:
chmod -x foo
- berrakyürütülebilirfoo
bayrakchmod x foo
- setyürütülebilirfoo
bayrakchmod go x foo
- yukarıdaki ile aynı, ama bayrak için ayarlayınGrupveDiğerkullanıcılar, dokunmaKullanıcı(owner) izin- Ama sadece dizinler için geçerli yukarıdaki gibi
chmod go X foo
-, dosyaları dokunma chmod -R go X foo
- yukarıdaki ile aynı, ama bunu yapmakÖzyinelemeli olarakfoo
tüm alt dizinleri için
belirli bir dizin altındaki tüm java d...
Komut satırı aracı, belirtilen adı ile...
Yinelemeli olarak kullanarak wget için...
Bir Topak() dosyalar Python yinelemeli...
Nasıl yinelemeli olarak grep mı?...