Shell Script để đi qua một thư mục đệ quy và chỉnh sửa dựa trên các điều kiện của loại tệp


7

Bất cứ ai cũng có thể chỉ cho tôi mã hoặc hướng dẫn để viết tập lệnh shell có thể đệ quy đi qua toàn bộ cấu trúc thư mục (bắt đầu từ thư mục làm việc hiện tại hoặc đưa ra một đối số bắt buộc về nơi bắt đầu tại) và có thể:

  1. Xác định xem một mục là một thư mục, và nếu nó là chmod 755, hoặc ...
  2. Xác định xem một mục có phải là một tệp (không phải là thư mục) hay chmod 644không.

Tôi đang tìm kiếm khả năng tương thích với Ubuntu, Debian, Dựa trên RHEL, v.v., vì vậy tôi không gắn thẻ này với bất kỳ ngôn ngữ cụ thể nào. Tôi thích điều này ở Bash, nhưng nếu bạn có tập lệnh ZSH, nó cũng sẽ hoạt động.

Câu trả lời:


9

Tôi đã quen với lệnh một dòng này (sẽ lặp lại bắt đầu trong thư mục làm việc hiện tại)

find . -type d -exec chmod 0755 '{}' + -or -type f -exec chmod 0644 '{}' +

Giải trình:

find .                    # starting in curdir find   
-type d                   # any directory
-exec chmod 0755 '{}'     # and chmod it to 755
+                         # (variant of -exec look find man page)
-or                       # or
-type f                   # any file
-exec chmod 0644 '{}'     # and chmod it to 644
+                         # (as above)

Điều đó đã làm việc. Tôi lấy nó nếu tôi làm điều này trong một tập lệnh và tôi đặt cd /path/to/dir/nó sẽ thay đổi thư mục làm việc, vì vậy tôi có thể sử dụng nó làm lệnh / tập lệnh dựa trên đối số không?
Thomas Ward

Tôi vừa thử nghiệm và cd xuất hiện để thay đổi thư mục làm việc trong một tập lệnh. Không chắc chắn nếu có bất kỳ ngoại lệ cho điều đó, mặc dù.

@palintropos cdkhông thay đổi thư mục làm việc trong tập lệnh. Nếu điều đó chưa từng xảy ra với bạn, điều đó khá lạ. Bạn có thể muốn gửi một câu hỏi mới về điều đó ... với các chi tiết.
Eliah Kagan

@palitropos trong tập lệnh của bạn, bạn chỉ có thể vượt qua thư mục trên cùng để tìm thay vì.
guido

1
Tiny nitpick: đây sẽ là một giải pháp hoàn toàn di động -othay vì -or(một GNUism, áp dụng tương tự -and).
ormaaj

3

Câu trả lời đơn giản:

chmod -R a+rX .

+X(lưu ý viết hoa X) có nghĩa là cấp quyền thực thi nếu quyền thực thi đã có sẵn cho một số người dùng. Nếu bạn có một cây thư mục có quyền cho chủ sở hữu và bạn muốn làm cho nó có thể truy cập được cho mọi người, đây là lệnh đúng để sử dụng. Nó không chỉ làm cho các thư mục có thể thực hiện được trên thế giới, mà còn các tệp thực thi.

Nếu bạn cũng muốn đặt lại quyền ghi chỉ cho chủ sở hữu và xóa mọi bit setuid / setgid, hãy thực hiện điều đó

chmod -R a-ws,u+w,a+rX .

Hai lớp lót zsh bắt buộc, nếu bạn không muốn thực hiện bất kỳ tệp nào có thể thực thi được:

chmod 755 **/*(/)
chmod 644 **/*(.)
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.