Tìm thư mục và tệp có quyền khác 775/664


21

Tôi đang chuyển một trang web từ máy chủ này sang máy chủ khác và Git không lưu trữ siêu dữ liệu như quyền truy cập tệp. Tôi cần tìm các thư mục và tập tin không tương ứng là 775/664.

Ngay bây giờ, tôi đang sử dụng phương án này với nhau:

$ find . -type d -exec ls -la {} \; | grep ^d | grep -v ^drwxrwxr-x
$ find . -type f -exec ls -la {} \; | grep -v ^d | grep -v ^-rw-rw-r-- | grep -v '.git'

Mặc dù điều này hoạt động, tôi cảm thấy nó khá hack. Có cách nào tốt hơn để làm điều này, có lẽ là một cách kinh điển, hay tôi chỉ nên hack?

Điều này đang chạy trên một phiên bản Ubuntu gần đây với các công cụ GNU dưới Bash.

Câu trả lời:


39

Sử dụng -permthử nghiệm để findkết hợp với -not:

find -type d -not -perm 775 -o -type f -not -perm 664
  • -perm 775phù hợp với tất cả các tệp có quyền chính xác bằng 775. -perm 664không giống nhau cho 664.
  • -not (boolean KHÔNG) phủ nhận thử nghiệm tiếp theo, do đó, nó khớp hoàn toàn ngược lại với những gì nó sẽ có: trong trường hợp này, tất cả các tệp không có quyền chính xác.
  • -o(boolean OR) kết hợp hai bộ thử nghiệm với nhau, khớp với nhau khi chúng thực hiện: nó có độ ưu tiên thấp nhất, vì vậy nó chia các thử nghiệm của chúng tôi thành hai nhóm riêng biệt. Bạn cũng có thể sử dụng dấu ngoặc đơn để rõ ràng hơn. Ở đây chúng tôi khớp các thư mục với các quyền không phải 775và các tệp thông thường với các quyền không có 664.

Nếu bạn muốn hai lệnh riêng biệt cho các thư mục và tệp, chỉ cần cắt nó một nửa -ovà sử dụng mỗi nửa riêng biệt.


Đẹp, cảm ơn bạn! Tôi không biết rằng hai điều kiện khác nhau có thể được đặt (ví dụ loại -d và loại -f) và tôi cũng không biết về -perm.
dotancohen

Có thể lưu ý rằng đó -notkhông phải là tiêu chuẩn POSIX; họ sử dụng !thay thế.
dùng1404316

2

Tôi không biết mã của bạn đã cố gắng đạt được điều gì. Thông thường, lý do để tìm Tệp và Thư mục có quyền không chính xác là nhằm mục đích thay đổi chúng.

Vì vậy, đây là những gì tôi đang sử dụng thành công trong Ubuntu 16.04

find \! -perm 775 -type d -exec chmod 775 {} \;
find \! -perm 664 -type f -exec chmod 664 {} \;

Điều này chứng tỏ! biểu tượng được thoát


Trên thực tế, mục tiêu không phải là thay đổi quyền của các tệp mà là xác định tệp nào cần quyền bông tuyết khi tải chúng lên máy chủ web sản xuất. Cảm ơn.
dotancohen
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.