2013-04-30 29 views
18

Tôi đang cố gắng grep cho các dòng trong trường đầu tiên của một đầu ra lớn hơn một số đã cho. Trong trường hợp này, số đó là 755. Cuối cùng, những gì tôi đang làm là cố gắng liệt kê tất cả các tập tin với các đặc quyền lớn hơn (và không bằng) 755 bằng cách sử dụng stat -c '%a %n' * và sau đó ống đến một số grep'ing (hoặc có thể sed'ing?) Để có được danh sách cuối cùng này. Bất kỳ ý tưởng làm thế nào điều này tốt nhất có thể được thực hiện?Các đường gpp cho các số lớn hơn số đã cho

+2

Vì '755' thực sự là một số bát phân biểu thị một chuỗi các bit, chính xác thì" lớn hơn "nghĩa là gì? '666' cho phép mọi người viết quyền truy cập; là "lớn hơn" '755'? '755'' lớn hơn "' 666'? –

+0

Người dùng OS X: Tương đương với 'stat -c '% a% n' *' (Linux) có vẻ là 'stat -f'% Lp% N '* ' – mklement0

+0

người đang yêu cầu grep, trong khi mọi người vẫn đang đưa ra awk? – Soncire

Trả lời

20

thử điều này:

stat -c '%a %n' *|awk '$1>755' 

nếu bạn chỉ muốn tên tập tin trong kết quả cuối cùng của bạn, bỏ qua những con số đặc quyền, bạn có thể:

stat -c '%a %n' *|awk '$1>755{print $2}' 

EDIT

thực sự bạn có thể làm chmod trong khi đang hoạt động. nhưng bạn nên đảm bảo rằng người dùng thực thi dòng awk có quyền thay đổi các tệp đó.

stat -c '%a %n' *|awk '$1>755{system("chmod 755 "$2)}' 

lại, giả sử tên tệp không có dấu cách.

+0

Oh cảm ơn vì tiện ích nhỏ đó. Tôi sẽ cắt bỏ lĩnh vực 2, nhưng bạn hoàn thành nó trong một đường ống ít hơn! – user2150250

+0

Xem ra tên tệp có dấu cách. –

+1

@ user2150250 lưu ý, lớp lót thứ hai của tôi cho rằng tên tệp của bạn không có dung lượng. – Kent

5

Tôi muốn sử dụng awk(1):

stat -c '%a %n' * | awk '$1 > 755' 

Các mô hình awk phù hợp với dòng mà trường đầu tiên là lớn hơn sau đó 755. Bạn có thể thêm một hành động nếu bạn muốn in một tập hợp con của một dòng hoặc một cái gì đó khác nhau, (Xem câu trả lời của @ Kent).

3

Không grep cũng không sed là tốt ở arithmetics. awk có thể giúp (tiếc là tôi không biết điều đó). Nhưng lưu ý rằng find có thể có ích ở đây, quá:

-perm mode 
      File's permission bits are exactly mode (octal or symbolic). 
      Since an exact match is required, if you want to use this form 
      for symbolic modes, you may have to specify a rather complex 
      mode string. For example -perm g=w will only match files which 
      have mode 0020 (that is, ones for which group write permission 
      is the only permission set). It is more likely that you will 
      want to use the `/' or `-' forms, for example -perm -g=w, which 
      matches any file with group write permission. See the EXAMPLES 
      section for some illustrative examples. 

    -perm -mode 
      All of the permission bits mode are set for the file. Symbolic 
      modes are accepted in this form, and this is usually the way in 
      which would want to use them. You must specify `u', `g' or `o' 
      if you use a symbolic mode. See the EXAMPLES section for some 
      illustrative examples. 

    -perm /mode 
      Any of the permission bits mode are set for the file. Symbolic 
      modes are accepted in this form. You must specify `u', `g' or 
      `o' if you use a symbolic mode. See the EXAMPLES section for 
      some illustrative examples. If no permission bits in mode are 
      set, this test matches any file (the idea here is to be consis‐ 
      tent with the behaviour of -perm -000). 

Vì vậy, những gì có thể làm việc cho bạn là:

find . -perm -755 -printf '%m %p\n' 

Chỉ cần loại bỏ các phần -printf nếu bạn chỉ cần tên tập tin.

Các vấn đề liên quan