Thay đổi chủ sở hữu của tệp đệ quy, nhưng không phải thư mục


14

Tôi có một thư mục có ~ 50k thư mục và ~ 1m tệp.

Tôi muốn thay đổi chủ sở hữu (hoặc quyền) của tất cả các tệp, nhưng không phải là thư mục. Điều này là do tôi đang cố gắng SCP các tệp bổ sung từ một máy chủ từ xa, (~ 150k thư mục và ~ 3,6m tệp).

Thư mục tôi có là một phần của thư mục từ xa, nhưng scp không thành công ...

Nếu tôi chạy lại SCP, nó sẽ bắt đầu lại bằng cách ghi đè lên các tệp tôi đã sao chép từ thư mục từ xa.

Câu trả lời:


20

Bạn có thể sử dụng find, nó có một lợi thế bổ sung là ARG_MAXsẽ không được kích hoạt trong quy trình. Từ thư mục mẹ:

find . -type f -exec chown newowner {} +

Dành cho chmod:

find . -type f -exec chmod 644 {} +

-type fsẽ findchỉ tập tin.


1
Hoạt động thực sự tuyệt vời! Cảm ơn! +1 cho cả chmod và chown
Marcus Brunsten

2
Vì vậy, findkhông kích hoạt ARG_MAX? Tôi luôn nghĩ rằng nó sẽ có. Bạn luôn học được điều gì đó :)
kos

5

Một cách khác là sử dụng xargs. Bạn sẽ cần sử dụng -print0tùy chọn với findvà một -0tùy chọn tương ứng là xargs:

find . -type f -print0 | xargs -0 chown newuser:newgroup

Từ man find:

-print0

in tên tệp đầy đủ trên đầu ra tiêu chuẩn, theo sau là ký tự null . Điều này cho phép tên tệp chứa dòng mới hoặc các loại khoảng trắng khác được diễn giải chính xác bởi các chương trình xử lý đầu ra tìm. Tùy chọn này tương ứng với tùy chọn -0 của xargs.

xargscũng sẽ xử lý chính xác ARG_MAX.


2
find..execkhông xử lý tên tập tin kỳ lạ..có gì khiến bạn nghĩ rằng nó không?
heemayl

1
@heemayl Tôi đã chạy một số thử nghiệm và có vẻ như bạn đúng. Tôi đứng sửa. Cảm ơn bạn đã chỉ ra nó, tôi đã cập nhật câu trả lời của tôi.
AP
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.