2013-04-30 11 views
18

Próbuję grep dla linii w pierwszym polu wyjścia, które są większe niż podana liczba. W tym przypadku ta liczba to 755. Ostatecznie to, co robię, polega na próbie wypisania każdego pliku z uprawnieniami większymi niż (i nie równymi) 755 za pomocą stat -c '%a %n' *, a następnie podłączenie do jakiegoś grep'ing (lub prawdopodobnie sed'ing?) W celu uzyskania tej ostatecznej listy. Jakieś pomysły, jak najlepiej to osiągnąć?Wiersze grep dla liczb większych niż podany numer

+2

Ponieważ '755' jest tak naprawdę liczbą ósemkową reprezentującą ciąg bitów, co dokładnie oznacza słowo" większy niż "? '666' daje każdemu dostęp do zapisu; czy to "większy niż" '755'? Czy '755'" jest większe niż "' 666'? –

+0

Użytkownicy OS X: odpowiednikiem 'stat -c '% a% n' *' (Linux) wydaje się być 'stat -f '% Lp% N' *' – mklement0

+0

osoba prosi o grep, podczas gdy ludzie wciąż dają awk? – Soncire

Odpowiedz

20

spróbuj tego:

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

jeśli chcesz tylko nazwę pliku w swoim ostatecznym wyjściem, pomiń numery przywilejem, możesz:

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

EDIT

rzeczywiście mogłeś wykonaj chmod w awk. ale powinieneś upewnić się, że użytkownik wykona linię awk ma uprawnienia do zmiany tych plików.

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

ponownie, załóżmy, że nazwa pliku nie zawiera spacji.

+0

Och dzięki za ten mały dodatek. Chciałem tylko wyciąć pole 2, ale twoje osiąga to w mniejszej ilości fajki! – user2150250

+0

Uważaj na nazwy plików ze spacjami. –

+1

@ user2150250 uwaga, moja druga strona typu awk przyjmuje, że nazwa pliku nie zawiera spacji. – Kent

5

użyję awk(1):

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

awk wzorzec pasuje linie gdzie pierwsze pole jest większa niż 755. Można by dodać akcję, jeśli chcesz drukować podzbiór linii lub czegoś innego, też (patrz odpowiedź @ Kenta).

3

Ani grep ani sed nie są dobre w arytmetyki. awk może pomóc (niestety nie wiem). Należy jednak pamiętać, że może tu być find poręczne, zbyt:

-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). 

Więc co może pracować dla Ciebie jest:

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

Wystarczy wyjąć -printf część, jeśli potrzebujesz tylko nazwy plików.

Powiązane problemy