Cara Mengunyah direktori secara rekursif termasuk file atau direktori tersembunyi


37

Sepertinya chown dengan flag rekursif tidak akan berfungsi pada direktori atau file tersembunyi. Apakah ada solusi sederhana untuk itu?

Jawaban:


56

Saya cukup yakin bahwa -Rbenderanya berfungsi dengan baik - bagaimanapun juga itu selalu berlaku untuk saya. Apa yang tidak akan berfungsi, dan apa yang membuat saya tersandung di awal penggunaan baris perintah saya, gunakan *dalam direktori dengan file / direktori tersembunyi. Melakukan

$ chown -R /home/user/*

tidak akan melakukan file dan direktori tersembunyi. Namun jika Anda mengikutinya

$ chown -R /home/user/.[^.]*

maka Anda akan melakukan semua file yang tersembunyi, (tetapi tidak .atau ..seperti yang /home/user/.*akan dilakukan). Setelah mengatakan semua itu, saya harapkan

$ chown -R /home/user

untuk mendapatkan semua file dan direktori tersembunyi di dalamnya /home/user- meskipun itu tentu saja juga akan mengubah izin direktori itu sendiri, yang mungkin bukan yang Anda inginkan.


3
Melakukan chownpada direktori memiliki efek samping bahwa Anda mengubah izin pada direktori itu sendiri serta semua isinya, yang mungkin atau mungkin tidak seperti yang Anda inginkan.
wfaulk

A + bekerja seperti pesona bagi saya.
SuperFamousGuy

Saya mencoba chown nginx:nginx -R /path/to/.[^.]*dan itu hanya mengubah kepemilikan menjadi file .dot tersembunyi. tidak semua.
Pathros

@wfaulk Seperti yang disebutkan oleh @Hamish Downer Anda harus melakukan keduanya *dan mengikutinya .[.^]*untuk mendapatkan semua file.
god_is_love

9

Saya percaya perintah berikut harus bekerja untuk ini

chown -hR userid:usergroup /nameofdirectory/nameofsubdir/

1
-h mempengaruhi tautan simbolik alih-alih file apa pun yang dirujuk (hanya berguna pada sistem yang dapat mengubah kepemilikan symlink)
R. van Twisk

8

"chown -R" bekerja, tetapi sebuah alternatif akan menggunakan find.

 find /path/to/dir -exec chown USER {} \;

5
perhatikan bahwa dengan GNU find, menggunakan +alih-alih ;sebagai terminator ke -exec akan lebih efisien karena akan menggunakan jumlah garpu minimum yang diperlukan untuk dikunyah daripada satu garpu per file / direktori
rebus

3

Anda dapat mengubah dotglobatribut sementara untuk memperluas. file dan kemudian mengembalikannya.

shopt -s dotglob; chown -R user:group FOLDER; shopt -u dotglob

Lebih lanjut dotglobdapat ditemukan di sini


2

Menggunakan untuk loop dengan ls -Apilihan, kita dapat menemukan semua file tersembunyi dan direktori mengecualikan .dan ..kemudian mengubah kepemilikan untuk semua file tersembunyi dan direktori.

for i in `ls -A | grep "^\."`;do chown -R user:group $i;done

Gunakan xargsopsi denganls -A

ls -A | grep "^\." | xargs chown user:group

Untuk lebih jelasnya Klik Di Sini dan Kunjungi Situs saya


1

Juga, jika Anda seperti saya, Anda mungkin akan menjalankan chown kebanyakan dari direktori saat ini. Saya terbiasa menjalankannya seperti ini: chown rails.rails -R *. Cukup mengubah tanda bintang ke titik (kependekan dari direktori saat ini) seperti ini: chown rails.rails -R .membawa semua direktori tersembunyi.


2
Dengan efek samping yang Anda ubah izin pada direktori saat ini serta semua isinya, yang mungkin atau mungkin tidak seperti yang Anda inginkan.
wfaulk

1

chownakan bekerja dengan file dan direktori tersembunyi. Dalam contoh berikut, kami akan mengubah kepemilikan pengguna dan grup untuk semua file di ~/some/folder. Semua file termasuk semua file yang tersembunyi (mis . .bashrc, .profileDll.) Dan folder pada ~/some/folderlevel dan di bawah. Perhatikan khususnya bahwa kami tidak ingin mengubah kepemilikan ~/some, dan karenanya kami akan mengecualikan file ~/some/..dari perubahan kepemilikan.

$ cd ~/some/folder 
$ sudo chown -R usrname:grpname . 
$ 

Ini bekerja untuk saya
klor

0

Untuk mengetahui semua file dalam direktori dan subdirektori saat ini untuk pengguna saat ini;

find . -exec chown $(whoami) {} \;

atau jika pengguna tidak dapat melihat beberapa file karena izin terbatas;

sudo find . -exec chown $(logname) {} \;

-2

Anda bisa melakukan sesuatu seperti

for i in `ls -A`;do chown -R user:group $i;done

The -A( capital A) adalah penting karena tidak termasuk '' dan '..'


Ini hanya akan mengubah file dan subdirektori dalam direktori saat ini, bukan pada level yang lebih rendah. (Yang mungkin OP inginkan.) Itu juga akan merusak nama file dan nama direktori dengan spasi (atau tab) di dalamnya.
wfaulk
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.