Ketika saya mencolokkan USB stick (FAT) ke mesin Mac atau Ubuntu saya, semua file memiliki bit executable yang ditetapkan. Setelah menyalin struktur direktori ke hard disk saya bagaimana cara menghapus bit yang dapat dieksekusi secara rekursif hanya dari file dan menyimpannya di direktori?
73
Jawaban:
Dengan
chmod
varian perintah tunggal GNU (di Ubuntu) (dimulai dari direktori saat ini):Penjelasan:
-R
- beroperasi secara rekursif-x
- hapus flag yang dapat dieksekusi untuk semua pengguna+X
- mengatur flag yang dapat dieksekusi untuk semua pengguna jika itu adalah direktoriDalam hal ini, modal
X
hanya berlaku untuk direktori karena semua flag yang dapat dieksekusi dibersihkan oleh-x
. Jika tidak,+X
set flag yang dapat dieksekusi juga jika flag tersebut awalnya ditetapkan untuk pengguna, grup, atau orang lain.Dengan BSD
chmod
(yang ada pada Mac OS X) Anda harus melakukannya secara terpisah dalam dua perintah:(Jika Anda ingin memasukkan file tersembunyi di direktori utama juga, Anda mungkin perlu mengubah * ke. (Titik), tetapi tidak teruji.)
sumber
chmod -R a-x+X *
umask
tidak mengizinkanx
izin untuk semua. Apakah Anda menggunakan defaultumask
atau Anda mengubahnya? Bisakah Anda mengirim output dariumask
perintah? Selain solusi Anda, ada juga kemungkinan ini:chmod -R a-x,+X *
yang akan mengaturx
izin menurut Andaumask
. Saya akan memperbarui jawabannya tetapi saya ingin memeriksa perilaku di BSD / Mac OS X terlebih dahulu.find
varian dalam jawaban di bawah untuk gaya menggabungkan alat sederhana yang melakukan One Thing Well..
alih-alih*
jika Anda ingin ini diterapkan ke semua fileJika Anda masuk ke jalur yang benar terlebih dahulu:
atau
Temuan ini menemukan semua file tipe 'f' (yang berarti file biasa) di path. dan kemudian memanggil chmod -x pada setiap file. {} Akan diganti untuk nama file dan \; mengakhiri perintah chmod.
sumber
find
mendukungnya, gunakan-exec ... \+
sebagai ganti-exec ... \;
- itu akan membutuhkan lebih sedikitfork
+exec
s. Jika tidak, gunakanfind ... -print0 | xargs -0 ...
.find . -type f -perm +111 -exec chmod -x {} \;
find
dukungan Anda,-print0
saya cukup yakin itu juga akan mendukung-exec
Di bawah Linux dan Unix di jendela terminal atau Di Mac OS X, gunakan ini di Terminal.app:
sumber
The
chmod -x+X
cara tidak bekerja untuk saya di ubuntu baik, sehingga saya menulis skrip python minimal ini:Jika mungkin ada hal-hal tambahan mewah seperti soket di sistem file Anda, Anda mungkin ingin mengelilingi chmod terakhir dengan mencoba / menangkap.
sumber