Bagaimana cara chmod dan chown file tersembunyi di Linux?


33

Bagaimana cara saya menjalankan chmodatau chownmenyembunyikan file secara rekursif ?

sudo chmod -R 775 * tidak berfungsi pada file tersembunyi.

Hal yang sama berlaku untuk sudo chown -R user:group.

Jawaban:


35

Jika Anda baik-baik saja juga memilih direktori saat ini, lakukan itu dan -Rlakukan pengangkatan berat. -Rtidak mengabaikan file tersembunyi.

sudo chmod -R 775 .

14
Ini ( * .*) bukan cara teraman untuk melakukannya. Khususnya, itu akan muncul kembali ke direktori induk, yang berarti chmodjuga saudara dari direktori saat ini. Cara yang tepat adalah * ..?* .[^.]*atau, bahkan lebih baik (mengingat wildcard mungkin tidak cocok dengan file apa pun) $(ls -A).
jpalecek

1
@ jpalecek: Output dari lsunparseable; mencoba mengurai itu meminta masalah. Pendekatan yang tepat adalah dengan menggunakan shell globbing.
Scott Severance

Meskipun di linux Anda memiliki kemampuan untuk mengubah urutan args untuk chmod, ketika melakukan skrip x-plat antara linux dan OS X, ini adalah urutan yang harus Anda gunakan, misalnya, sudo chmod 775 -Rakan menjadi perut buncit, jadi pertahankan jawaban ini .
kayleeFrye_onDeck

35

* tidak menyertakan file tersembunyi secara default, tetapi jika Anda berada di bash, Anda dapat melakukan ini dengan:

shopt -s dotglob

Baca lebih lanjut tentang itu di builtinmanual bash :

Jika diset, Bash menyertakan nama file yang diawali dengan `. ' dalam hasil ekspansi nama file.

Ini akan membuat *menyertakan file tersembunyi juga.

chmod -R 775 *

Nonaktifkan dengan:

shopt -u dotglob

2
Bagaimana cara melakukannya zsh?
tidak ada yang istimewa di sini

2
Anda menggunakan (D)kualifikasi globbing, misalnyachmod -R 775 *(D)
slhck

2

Pilihan lain adalah menggunakan findsaya suka karena Anda dapat memiliki kontrol berbutir halus atas itu.

find <path to start from> -exec chown <options> {} \+

find -path '<path to include>' -exec chown <options> {} \+

Satu-satunya downside adalah yang findmemiliki sintaks berbeda pada versi yang berbeda.


2

Semua file di direktori saat ini, secara rekursif, termasuk file tersembunyi:

chmod 755 -R ./* ./.[!.]*

Semua file di direktori saat ini, tidak secara rekursif, termasuk file tersembunyi:

chmod 755 ./* ./.[!.]*

Ini tidak akan mengubah nama file pengecualian yang dimulai dengan 2 titik, misalnya, "./..thisonescapesunharmed.txt"

Juga, berhati-hatilah untuk tidak menghapus bit "x", atau semua direktori Anda tidak akan dapat diakses (satu membutuhkan bit x untuk cd ke dir).

Ingat peringatan ini: tidak pernah menggunakan telanjang *tapi ./*sebagai gantinya.

Untuk menghindari masalah pengaturan izin pada direktori, gunakan findsaja.

find . -type f -exec chmod `VALUE` {} \;
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.