Làm thế nào tôi có thể chmod / chown một danh sách cụ thể của các tập tin?


31

Tôi muốn viết một tập lệnh .sh để thiết lập một số quyền của thư mục, nhưng tự hỏi liệu tôi có thể chạy một cái gì đó như:

chown -644 ./one;/two;/three

để chown một danh sách các thư mục, thay vì gọi chown nhiều lần.

Ngoài ra, sẽ có một cách để liệt kê danh sách các tệp và loại trừ một số tệp khác, ví dụ như:

chown -R -664 ./*;!./cache

Tôi hy vọng dòng lệnh giả của tôi có ý nghĩa.

Câu trả lời:


43

Hầu như tất cả các công cụ Unix chấp nhận một danh sách các tệp dưới dạng đối số không phải là tùy chọn. Như thường lệ, các đối số khác nhau phải được phân tách bằng dấu cách:

chown 644 one two three

Trong ví dụ thứ hai của bạn, nếu bạn đang sử dụng Bash, một cách đơn giản

chown -R 644 !(cache)

sẽ có đủ.

Cách tiếp cận này đòi hỏi phải phù hợp với mô hình mở rộng. Nếu nó bị vô hiệu hóa, bạn có thể kích hoạt nó với

shopt -s extglob

Xem: Hướng dẫn tham khảo Bash # Kết hợp mẫu


4

Tạo một danh sách tên tệp trong mod-These.txt và sau đó chạy:

chmod g+w `cat mod-these.txt`

hoặc sử dụng phương pháp được mô tả bởi những người khác ở đây:

chown 644 one two three

hoặc đi đến thị trấn với tùy chọn đầu tiên nhưng thao tác từng dòng trong tệp (trong ví dụ này: thay thế "/" (VỚI khoảng trắng trước) bằng "./"):

chmod g+w `sed 's/ \// .\//' update-writable.txt` 

2

regex cho chiến thắng!

sử dụng find là cách tốt nhất tôi có thể nghĩ đến bên ngoài việc sử dụng regex có thể đã tồn tại trong trình bao cụ thể của bạn hoặc trong ứng dụng bạn đang sử dụng. đầu tiên, tôi đã thử:

touch one&touch two &touch three&find -name "one|two|three" -exec chown -644 {} \;

Nhưng, bạn sẽ thấy rằng đường ống không hoạt động trong trường hợp này. Một điều đáng buồn khác để học ... như học chmod, chown, chgrp, et. al. không hỗ trợ đa lựa chọn / regex / loại trừ chính nó ...
Giải pháp tôi tìm thấy:
/programming/19111067/regex-match-either-opes-in-linux-find-command

find \( -name one -o -name two -o -name three \) -exec chown -644 {} \;

vì vậy, không quá nhiều regex cho chiến thắng, nhưng ít nhất chúng ta có một cách để đưa một danh sách các tập tin vào các đối số của một chương trình trong một lớp lót.

bạn sẽ lưu ý rằng bạn cần phải thoát () các ký tự meta và thêm tham số -o cho mỗi tên bổ sung ...

các liên kết và nội dung khác từ tôi có thể khiến bạn quan tâm trong chuyến du lịch của mình:
Các mẩu tin khác nhau - ghi chú từ korn bourne và bạn bè. - Trang web của Dave Horner

Chúc mừng.
-


KISS chiến thắng, giữ cho nó đơn giản và ngu ngốc! không cần những thứ phức tạp mà vẫn có thể sạch sẽ và dễ dàng.
Al-Mothafar

2

Nếu các tệp bạn muốn sửa đổi nằm trong một thư mục, bạn có thể đặt chúng với mẫu cần thiết.

ví dụ: tôi cần tất cả các tệp .sl đã tải xuống trong pwd để được thay đổi thành tệp thực thi:

chmod +x `ls *.run`
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.