Bagaimana saya bisa melakukan chmod rekursif hanya pada direktori?

31

Saya ingin mengubah izin pada pohon di Centos 4 untuk menambahkan izin eksekusi untuk semua direktori secara rekursif dari direktori. Jika saya menggunakan chmod normal, file selain direktori juga dimodifikasi:

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

Bagaimana saya hanya memengaruhi direktori?

WilliamKF
sumber

Jawaban:

48

Jalankan findpada -type d( direktori ) dengan yang -executama untuk melakukan chmodhanya pada folder:

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

Untuk memastikan itu hanya melakukan itu pada objek yang diinginkan, Anda dapat menjalankannya saja find /your/path/here -type d; itu hanya akan mencetak direktori yang ditemukannya.

Daniel Beck
sumber
Bisakah Anda jelaskan apa {} \; bukan?
Srekel
2
@Srekel lihat jawaban ini askubuntu.com/questions/339015/…
MADforFUNandHappy
17

Lihat contoh baris perintah - chmod di Wikipedia.

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

Seperti yang ditambahkan oleh Daniel: ini seharusnya bisa digunakan untuk Anda:

chmod -R o+X directory
mmdemirbas
sumber
Ini akan memengaruhi izin file saat ini di dalam direktori.
scriptmonster
@scriptmonster, baris yang dikutip salah untuk kasus ini, tetapi chmod -R o+X directoryharus berfungsi untuk OP.
Daniel Beck
1
Bagi mereka yang bertanya-tanya tentang perbedaannya, seperti saya, X juga akan menerapkan izin eksekusi ke file apa pun yang sudah memiliki setidaknya satu bit izin eksekusi yang telah ditetapkan (baik pengguna, grup, atau lainnya). Dalam kasus umum, jawaban yang diterima lebih baik.
ixe013
1
find /home/mydir -type d | xargs chmod ugo+rx

Ini berfungsi pada CentOS6, yang tidak ditemukan oleh -exec di atas. Pada dasarnya itu hanya pipa daftar direktori ke perintah xargs yang mengirimnya ke chmod. Chmod kemudian menetapkan universal read dan execute (search) pada direktori. Untuk melakukan ini untuk semua pengguna di rumah gunakan sudo:

sudo sh -c "find /home/ -type d | xargs chmod ugo+rx"
Mark White
sumber