775/664 dışındaki izinlere sahip dizinleri ve dosyaları bulun


21

Bir web sitesini bir sunucudan diğerine taşıyorum ve Git, dosya izinleri gibi meta verileri depolamıyor. Ben sırasıyla 775/664 olmayan dizinleri ve dosyaları bulmak gerekir.

Şu anda, bu Arnavut kaldırımlı birlikte mekanizmayı kullanıyorum:

$ find . -type d -exec ls -la {} \; | grep ^d | grep -v ^drwxrwxr-x
$ find . -type f -exec ls -la {} \; | grep -v ^d | grep -v ^-rw-rw-r-- | grep -v '.git'

Bu işe yarıyor olsa da, oldukça hileli olduğunu hissediyorum. Bunu yapmanın daha iyi bir yolu var mı, belki de kanonik bir yol mu yoksa sadece acayip olmalıyım?

Bu, Bash altında GNU araçlarıyla son zamanlarda yapılan bir Ubuntu sürümünde çalışıyor.

Yanıtlar:


39

-permTesti aşağıdakilerle findkombinasyon halinde kullanın -not:

find -type d -not -perm 775 -o -type f -not -perm 664
  • -perm 775tüm dosyaları izinlere tam olarak eşit olanlarla eşleştirir 775. -perm 664için de aynı şeyi yapar 664.
  • -not (boolean NOT) aşağıdaki testi reddeder, bu nedenle sahip olacağının tam tersi ile eşleşir: bu durumda, doğru izinlere sahip olmayan tüm dosyalar.
  • -o(boolean OR) iki test grubunu bir araya getirir ve bunlardan herhangi biri olduğunda eşleşir: en düşük önceliğe sahiptir, bu yüzden testlerimizi iki ayrı gruba ayırır. Daha açık olmak için parantezleri de kullanabilirsiniz . Burada dizinleri olmayan izinlerle 775ve sıradan dosyaları olmayan izinlerle eşleştiriyoruz 664.

Dizinler ve dosyalar için iki ayrı komut istiyorsanız, ikiye bölün -ove her bir yarıyı ayrı ayrı kullanın.


Güzel teşekkür ederim! İki farklı koşulun (tip -d ve tip -f gibi) ayarlanabileceğini veya -perm'i bilmiyordum.
dotancohen

Belki -notbir POSIX standardı olmadığını unutmayın ; Kullandıkları !yerine.
user1404316

2

Kodunuzu elde etmeye çalıştığım hakkında hiçbir fikrim yok. Normalde yanlış izinlere sahip Dosya ve Dizinleri bulmanın nedeni onları değiştirmek içindir.

Bu yüzden Ubuntu 16.04'te başarıyla kullanıyorum

find \! -perm 775 -type d -exec chmod 775 {} \;
find \! -perm 664 -type f -exec chmod 664 {} \;

Bu gösterir! kaçan sembol


Aslında amaç, dosyaların izinlerini değiştirmek değil, bir üretim web sunucusuna yüklerken hangi dosyaların kar tanesi izinlerine ihtiyaç duyduğunu belirlemekti. Teşekkürler.
dotancohen
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.