Làm thế nào để Chown một thư mục đệ quy bao gồm các tập tin hoặc thư mục ẩn


37

Có vẻ như chown với cờ đệ quy sẽ không hoạt động trên các thư mục hoặc tập tin ẩn. Có cách giải quyết đơn giản nào cho việc đó không?

Câu trả lời:


56

Tôi khá chắc chắn rằng -Rcờ hoạt động - dù sao nó luôn có cho tôi. Những gì không hoạt động, và những gì làm tôi vấp ngã sớm trong việc sử dụng dòng lệnh của mình, đang sử dụng *trong một thư mục chứa các tệp / thư mục ẩn. Làm như vậy

$ chown -R /home/user/*

sẽ không làm các tập tin và thư mục ẩn. Tuy nhiên nếu bạn làm theo nó với

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

sau đó bạn sẽ làm tất cả các tập tin ẩn, (nhưng không .hoặc ..như /home/user/.*sẽ làm). Đã nói tất cả, tôi sẽ mong đợi

$ chown -R /home/user

để có được tất cả các tệp và thư mục ẩn bên trong /home/user- mặc dù điều đó tất nhiên cũng sẽ thay đổi quyền của chính thư mục, đây có thể không phải là những gì bạn dự định.


3
Thực hiện một chowntrên thư mục có tác dụng phụ là bạn thay đổi các quyền trên chính thư mục cũng như tất cả nội dung của nó, có thể hoặc không thể là những gì bạn muốn.
wfaulk

A + làm việc như một cơ duyên đối với tôi.
SuperFamousGuy

Tôi đã thử chown nginx:nginx -R /path/to/.[^.]*và nó chỉ thay đổi quyền sở hữu thành các tập tin ẩn. không phải tất cả.
Pathros

@wfaulk Như đã đề cập bởi @ Hamish Downer, bạn phải thực hiện cả hai *và làm theo nó .[.^]*để có được tất cả các tệp.
god_is_love

9

tôi tin rằng lệnh sau sẽ làm việc cho điều này

chown -hR userid:usergroup /nameofdirectory/nameofsubdir/

1
-h ảnh hưởng đến các liên kết tượng trưng thay vì bất kỳ tệp tham chiếu nào (chỉ hữu ích trên các hệ thống có thể thay đổi quyền sở hữu của một liên kết tượng trưng)
R. van Twisk

8

"chown -R" hoạt động, nhưng một giải pháp thay thế sẽ được sử dụng find.

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

5
lưu ý rằng với GNU find, sử dụng +thay vì ;làm dấu kết thúc cho -exec sẽ hiệu quả hơn vì nó sẽ sử dụng số lượng dĩa cần thiết tối thiểu để thay vì một ngã ba trên mỗi tệp / thư mục
hầm

3

Bạn có thể thay đổi dotglobthuộc tính tạm thời để mở rộng. tập tin và sau đó hoàn nguyên nó.

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

Thêm về dotglobcó thể được tìm thấy ở đây


2

Sử dụng cho vòng lặp với ls -Atùy chọn, Chúng tôi có thể tìm thấy tất cả các file ẩn và thư mục loại trừ ...và sau đó thay đổi quyền sở hữu đối với tất cả các file và thư mục ẩn.

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

Sử dụng xargstùy chọn vớils -A

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

Để biết thêm chi tiết Bấm vào đây và truy cập trang web của tôi


1

Ngoài ra, nếu bạn giống tôi, có lẽ bạn sẽ chạy chown chủ yếu từ thư mục hiện tại. Tôi đã quen với việc chạy nó như thế này : chown rails.rails -R *. Đơn giản chỉ cần thay đổi dấu hoa thị thành dấu chấm (viết tắt của thư mục hiện tại) như thế này: chown rails.rails -R .mang lại tất cả các thư mục ẩn.


2
Với tác dụng phụ là bạn thay đổi các quyền trên thư mục hiện tại cũng như tất cả nội dung của nó, có thể hoặc không thể là những gì bạn muốn.
wfaulk

1

chownsẽ làm việc với các tập tin và thư mục ẩn. Trong ví dụ sau, chúng tôi sẽ thay đổi quyền sở hữu nhóm và người dùng cho tất cả các tệp trong ~/some/folder. Tất cả các file bao gồm tất cả ẩn file (ví dụ .bashrc, .profilevv) và thư mục ở ~/some/foldermức độ và dưới đây. Đặc biệt lưu ý rằng chúng tôi không muốn thay đổi quyền sở hữu ~/somevà vì vậy chúng tôi sẽ loại trừ tệp ~/some/..khỏi các thay đổi quyền sở hữu.

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

Điều này làm việc cho tôi
klor

0

Để điều khiển TẤT CẢ các tệp trong thư mục hiện tại và thư mục con cho người dùng hiện tại;

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

hoặc nếu người dùng không thể truy cập một số tệp do quyền hạn chế;

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

-2

Bạn có thể làm một cái gì đó như

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

Các -A( vốn A) là quan trọng vì nó không bao gồm '' và '..'


Điều này sẽ chỉ thay đổi các tệp và thư mục con trong thư mục hiện tại, không thay đổi bất kỳ cấp thấp hơn. (Đó có thể là những gì OP muốn.) Nó cũng sẽ phá vỡ tên tệp và tên thư mục có dấu cách (hoặc tab) trong đó.
wfaulk
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.