Bagaimana cara chmod 755 semua direktori tetapi tidak ada file (secara rekursif)?
Sebaliknya, bagaimana chmod hanya file (secara rekursif) tetapi tidak ada direktori?
permissions
chmod
Olivier Lalonde
sumber
sumber
Jawaban:
Untuk secara rekursif memberikan direktori hak baca & eksekusi:
Untuk secara rekursif memberikan file hak istimewa baca:
Atau, jika ada banyak objek untuk diproses:
Atau, untuk mengurangi
chmod
pemijahan:sumber
-bash: /bin/chmod: Argument list too long
. Perintah terakhir bekerja dengan banyak file, tetapi ketika menggunakansudo
salah satu harus berhati-hati untuk meletakkannya sebelum xargs bukannya chmod:find /path/to/base/dir -type d -print0 | sudo xargs -0 chmod 755
dir
juga akan diatur ke 755.chmod ... $(find /path/to/base/dir -type ...)
gagal untuk nama file dengan spasi di namanya.find /path/to/base/dir -type d -exec chmod 755 {} \;
(find /path/to/base/dir -type f -exec chmod 644 {} \;
).Alasan umum untuk hal semacam ini adalah untuk mengatur direktori ke 755 tetapi file ke 644. Dalam hal ini ada cara yang sedikit lebih cepat daripada
find
contoh nik :Berarti:
-R
= secara rekursif;u+rwX
= Pengguna dapat membaca, menulis, dan mengeksekusi;go+rX
= grup dan yang lainnya dapat membaca dan mengeksekusi;go-w
= grup dan yang lain tidak bisa menulisYang penting untuk dicatat di sini adalah bahwa huruf besar
X
tindakan berbeda untuk huruf kecilx
. Secara manual kita bisa membaca:Dengan kata lain, chmod u + X pada file tidak akan mengatur bit eksekusi; dan g + X hanya akan mengaturnya jika sudah ditetapkan untuk pengguna.
sumber
chmod -R 777
karena+X
opsi tidak akan mereset bit eksekusi yang ada pada file. Menggunakan -x akan mengatur ulang direktori, dan mencegahnya.X
, seperti yang dijelaskan dalam komentar.go+rX,go-w
->go=rX
bukan?chmod u-x,u+X
dalam kombinasi, dll., Untuk menghapus bit eksekusi untuk file, tetapi menambahkannya untuk direktori.Jika Anda ingin memastikan file diatur ke 644 dan ada file di jalur yang memiliki flag eksekusi, Anda harus menghapus flag eksekusi terlebih dahulu. + X tidak menghapus flag eksekusi dari file yang sudah memilikinya.
Contoh:
Pembaruan: ini tampaknya gagal karena perubahan pertama (ugo-x) membuat direktori tidak dapat dieksekusi, sehingga semua file di bawahnya tidak berubah.
sumber
chmod -R ugo-x path
, itu mungkin menjadi masalah. Tetapi perintah lengkap akan melakukanchmod u+rwX
pada setiap direktori sebelum mencoba turun ke dalamnya.) Namun, saya percaya ituchmod R u=rw,go=r,a+X path
sudah cukup - dan lebih pendek.Saya memutuskan untuk menulis naskah kecil untuk ini sendiri.
Skrip chmod rekursif untuk dir dan / atau file - Inti :
chmodr.sh
Ini pada dasarnya melakukan chmod rekursif tetapi juga memberikan sedikit fleksibilitas untuk opsi baris perintah (mengatur direktori dan / atau izin file, atau mengecualikan keduanya secara otomatis me-reset semuanya ke 755-644). Itu juga memeriksa beberapa skenario kesalahan.
Saya juga menulis tentang itu di blog saya .
sumber
Untuk secara rekursif memberikan direktori hak baca & eksekusi:
Untuk secara rekursif memberikan file hak istimewa baca:
Lebih baik terlambat daripada tidak pernah membiarkan saya meningkatkan jawaban nik di sisi kebenaran. Solusi saya lebih lambat, tetapi berfungsi dengan sejumlah file, dengan simbol apa pun dalam nama file, dan Anda dapat menjalankannya dengan sudo secara normal (tetapi berhati-hatilah bahwa ia mungkin menemukan file yang berbeda dengan sudo).
sumber
Coba skrip python ini; tidak memerlukan proses pemijahan dan hanya melakukan dua syscalls per file. Terlepas dari implementasi dalam C, itu mungkin akan menjadi cara tercepat untuk melakukannya (saya membutuhkannya untuk memperbaiki sistem file 15 juta file yang semuanya diatur ke 777)
Dalam kasus saya, coba / tangkap diperlukan di sekitar chmod terakhir, karena chmodding beberapa file khusus gagal.
sumber
Anda juga dapat menggunakan
tree
:dan jika Anda juga ingin melihat folder tambahkan gema
sumber
xargs
masalah. Kutipan tunggal dalam nama file sendiri merupakan masalah bagi banyak perintah dan skrip itu sebabnya saya mendaftarkan semua file yang berisi tanda kutip tunggal dan menghapusnya (tanda kutip yang saya maksud)Anda bisa menggunakan skrip bash berikut sebagai contoh. Pastikan untuk memberikannya izin yang dapat dieksekusi (755). Cukup gunakan ./autochmod.sh untuk direktori saat ini, atau ./autochmod.sh <dir> untuk menentukan yang lain.
sumber
$1
bukan null, tetapi bukan nama direktori (mis. Adalah salah ketik), makadir
akan diatur ke.
tanpa pesan. (2)$1
harus"$1"
dan$dir
seharusnya"$dir"
. (3) Anda tidak perlu mengatakan"./"
;"."
baik-baik saja (dan, sebenarnya, Anda tidak perlu penawaran di sini). (4) Ini bukan solusi rekursif. (5) Di sistem saya,ls -l … | awk '{ print $8 }'
dapatkan waktu modifikasi file. Anda harus{ print $9 }
mendapatkan kata pertama dari nama file. Dan bahkan kemudian, (6) ini tidak menangani nama file dengan ruang putih. ...chmod
sendiri ke 644, sehingga membuat sendiri non-executable!