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?

toby
sumber

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.

Hamish Downer
sumber
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/
MattrixHax
sumber
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 {} \;
hayalci
sumber
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

stdcall
sumber
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

Ranjeet_Automation_Tester
sumber
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.

Craig
sumber
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 . 
$ 
Seamus
sumber
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) {} \;
5p0ng3b0b
sumber
-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 '..'

Zypher
sumber
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