Saya memiliki arsip, yang diarsipkan oleh orang lain, dan saya ingin secara otomatis, setelah saya unduh, untuk mengubah cabang sistem file dalam file yang diekstraksi untuk mendapatkan akses baca. (Saya tidak bisa mengubah cara arsip dibuat).
Saya telah melihat ke dalam utas ini: chmod: Cara menambahkan izin eksekusi secara rekursif hanya ke file yang sudah memiliki izin eksekusi seperti pada beberapa orang lain, tetapi tidak ada sukacita.
Direktori awalnya datang dengan beberapa tetapi semua bendera salah, mereka mungkin muncul sebagai:
drwx------
d---r-x---
drwxrwxr-x
dr--r-xr--
Itu hanya beberapa yang saya temukan sejauh ini, tetapi bisa jadi lebih.
find
kesalahan ketika mencoba melihat ke direktori tanpa x
izin, dan jadi tidak meneruskannya ke chmod
. Apa yang telah saya lakukan sejauh ini, secara manual mengubah izin pada direktori induk, kemudian masuk ke direktori anak dan melakukan hal yang sama untuk mereka dan seterusnya. Tapi ini banyak kerja tangan. Apakah tidak ada cara untuk melakukan ini secara otomatis?
Yaitu bagaimana saya melakukannya sekarang:
melakukan:
$ chmod -R +x
$ chmod -R +r
sampai saya tidak mendapatkan kesalahan, lalu
$ find -type f -exec chmod -x {} +
Tetapi harus ada cara yang lebih baik.
Jawaban:
Anda perlu akses baca, selain untuk mengeksekusi akses, untuk membuat daftar direktori. Jika Anda hanya memiliki akses eksekusi, maka Anda dapat mengetahui nama entri dalam direktori, tetapi tidak ada informasi lain (bahkan bukan tipe, sehingga Anda tidak tahu entri mana yang merupakan subdirektori). Ini bekerja untuk saya:
sumber
+
membangun command-line dengan cara yang berbeda. Aku sebenarnya tidak menyadarinya;\;
adalah cara yang biasa, dengan satu perintah per file yang cocok dengan pencarian."{}"
bukannya{}
harus memperbaikinya.Anda dapat menggunakan chmod dengan
X
huruf mode (ibukota X) untuk mengatur flag yang dapat dieksekusi hanya untuk direktori.Pada contoh di bawah ini, flag yang dapat dieksekusi dihapus dan kemudian diatur untuk semua direktori secara rekursif:
Sedikit penjelasan:
chmod -x foo
- hapus flag eXecutable untukfoo
chmod +x foo
- mengatur flag eXecutable untukfoo
chmod go+x foo
- sama seperti di atas, tetapi atur tanda hanya untuk Grup dan Pengguna lain , jangan sentuh izin Pengguna (pemilik)chmod go+X foo
- sama seperti di atas, tetapi hanya berlaku untuk direktori, jangan sentuh filechmod -R go+X foo
- sama seperti di atas, tetapi lakukan ini secara rekursif untuk semua subdirektori darifoo
sumber
Cobalah untuk mengubah semua pengajuan secara bersamaan:
sumber
find -type f -exec chmod -x {} +
setelah itu.Untuk membuat semua yang dapat ditulis oleh pemilik, baca / eksekusi oleh grup, dan dieksekusi dunia:
Untuk membuat semuanya terbuka lebar:
sumber
chmod -R 0777 .
Menambahkan izin yang dapat dieksekusi, secara rekursif , ke semua file (bukan folder) dalam folder saat ini dengan
sh
ekstensi:find . -name '*.sh' -type f | xargs chmod +x
* Perhatikan pipa (
|
)sumber
Berikan 0777 ke semua file dan direktori mulai dari jalur saat ini:
sumber