Saya ingin menetapkan 755 izin pada semua file dan sub-direktori di bawah direktori tertentu, tetapi saya ingin menjalankan chmod 755 hanya untuk komponen-komponen yang tidak memiliki izin 755.
find /main_directory/ -exec chmod 755 {} \;
Jika find
perintah mengembalikan daftar panjang, ini akan memakan banyak waktu. Saya tahu bahwa saya dapat menggunakan perintah stat untuk memeriksa izin tingkat file Oktal dari masing-masing komponen dan kemudian menggunakan if-else untuk mengaktifkan izin file, tetapi apakah ada pendekatan garis tunggal yang menggunakan find
dan xargs
untuk terlebih dahulu memeriksa izin apa yang dimiliki file / direktori tersebut? , dan kemudian gunakan chmod
untuk mengubahnya ke 755 jika diatur ke sesuatu yang lain.
command-line
find
chmod
Kumarjit Ghosh
sumber
sumber
u+rw,go+r,go-w,ugo+X
- perhatikan ibukota.Jawaban:
Jika Anda ingin mengubah izin
755
pada file dan direktori, tidak ada manfaat nyata untuk menggunakanfind
(dari sudut pandang kinerja setidaknya), dan Anda bisa melakukanJika Anda benar-benar ingin menggunakan
find
untuk menghindari mengubah izin pada hal-hal yang sudah memiliki755
izin (untuk menghindari memperbarui cap waktu ctime mereka), maka Anda juga harus menguji izin saat ini pada setiap direktori dan file:Mereka
-exec ... {} +
akan mengumpulkan nama path sebanyak mungkin yang lulus! -perm 0755
tes, dan mengeksekusichmod
semuanya sekaligus.Biasanya, seseorang ingin mengubah izin pada file dan direktori secara terpisah, sehingga tidak semua file dapat dieksekusi:
sumber
+
bukannya;
membuat perbedaan besar di sini.Seperti yang
find
didapat dari-exec ... +
sintaksis, tidak ada gunanya menggunakanxargs
, tetapi ketika Anda memintanya:sumber
-0
(dalam kombinasi dengan-print0
in; yang merupakan ekstensi GNU) dapat menjadi masalah keamanan yang cukup bijaksana jika penyerang potensial dapat membuat nama file yang menyertakan spasi putih atau karakter khusus lainnya di dalamnya. Jadi lebih baik berpegang-exec
xargs
(gunakan saja-exec
), dan jika Anda menggunakannya Anda harus menggunakan-print0
/-0
seperti kata Matija.