Chmod özyinelemeli


249

Bir başkası tarafından arşivlenmiş bir arşivim var ve indirdikten sonra otomatik olarak okumak için elde edilen dosyalardaki dosya sisteminin bir dalını değiştirmek istiyorum. (Arşivin oluşturulma şeklini değiştiremiyorum).

Ben bu iş parçacığı içine baktım: chmod: nasıl yinelenen yürütme izinleri eklemek için sadece zaten diğerleri gibi yürütme izni , ama hiçbir sevinç dosyaları.

Dizinler başlangıçta birden fazla ama tüm yanlış bayraklarla birlikte gelir, şu şekilde görünebilir:

drwx------
d---r-x---
drwxrwxr-x
dr--r-xr--

Bunlar şimdiye kadar keşfettiğim az sayıda, ama daha fazlası olabilir.

findxizinsiz bir dizine bakmaya çalıştığında hata oluşur ve dizine geçmez chmod. Şimdiye kadar yaptığım şey, üst dizindeki izinleri el ile değiştirmek, sonra alt dizinlere gidip onlar için aynısını yapmak. Ama bu çok fazla el emeği. Bunu otomatik olarak yapmanın bir yolu yok mu?

Yani şimdi nasıl yapıyorum:

yapmak:

$ chmod -R +x
$ chmod -R +r

hiçbir hata alana kadar

$ find -type f -exec chmod -x {} +

Ama daha iyi bir yol olmalı.


3
-r, -R ile aynı değildir
PJ Brunet

Çeşitli not, tüm grup izinlerinin sahip izinleriyle eşleştiğini söylemek istiyorsanız (
IMO'yu doldurmak

Yanıtlar:


131

Bir dizini listelemek için erişimi yürütmenin yanı sıra okuma erişimine de ihtiyacınız vardır. Yalnızca yürütme erişimine sahipseniz, dizindeki girdilerin adlarını öğrenebilirsiniz, ancak başka bilgi bulamazsınız (türler bile değil, bu nedenle hangi girdilerin alt dizin olduğunu bilmezsiniz). Bu benim için çalışıyor:

find . -type d -exec chmod +rx {} \;

2
Arasındaki fark nedir '\;' ve komutun sonunda OP tarafından kullanılan '+'?
kon psych

1
@konpsych Görünüşe göre +komut satırını farklı bir şekilde oluşturur. Aslında bunun farkında değildim; \;her dosya için aramayla eşleşen bir komutla olağan yöntemdir.
Fred Foo

Bazı dosyaların
adlarında

3
@Soonts Sonra "{}"yerine {}düzeltmek gerekir.
user4642212

Bunu Windows 10'da linux alt sistemi altında çalıştırdım ve bunun tersi oldu. Dosya izinlerinin çoğu kaldırıldı.
Max Candocia

176

Sen ile chmod kullanabilirsiniz Xdizinler için yalnızca yürütülebilir bayrağını ayarlamak için mod harf (sermaye X).

Aşağıdaki örnekte, yürütülebilir bayrak temizlenir ve tüm dizinler için özyinelemeli olarak 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

Biraz açıklama:

  • chmod -x foo- için eklenebilir bayrağı temizlefoo
  • chmod +x foo- eXecutable bayrağınıfoo
  • chmod go+x foo- yukarıdakiyle aynıdır, ancak bayrağı yalnızca Grup ve Diğer kullanıcılar için ayarlayın , Kullanıcı (sahip) iznine dokunmayın
  • chmod go+X foo - yukarıdakiyle aynı, ancak yalnızca dizinlere uygulanır, dosyalara dokunmayın
  • chmod -R go+X foo- yukarıdakiyle aynı, ancak bunu tüm alt dizinleri için Yinelemeli olarak yapınfoo

80

Tüm istekleri aynı anda değiştirmeye çalışın:

chmod -R +xr

Bu, tüm dizin olmayanlar için de yürütme izinleri koyacaktır.
Fred Foo

1
Evet. Bu sadece ilk yinelenen adımın yerini alır. Daha find -type f -exec chmod -x {} +sonra hala koşman gerek.
choroba

50

Her şeyi sahip tarafından yazılabilir yapmak için, grup tarafından okunabilir / yürütülebilir ve dünya tarafından yürütülebilir:

chmod -R 0755

Her şeyi tamamen açmak için:

chmod -R 0777

12
Geçerli klasör konumunu ekle:chmod -R 0777 .
Danijel

18

Geçerli klasördeki uzantıya sahip tüm dosyalara (klasörlere değil) yinelenen olarak yürütülebilir izinler ekleme sh:

find . -name '*.sh' -type f | xargs chmod +x

* Boruyu ( ) dikkat edin|


2

Geçerli yoldan başlayarak tüm dosyalara ve dizinlere 0777 verin:

chmod -R 0777 ./

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.