2013-04-30 6 views
18

Sto provando a grep per le righe nel primo campo di un'uscita che sono maggiori di un numero specificato. In questo caso, quel numero è 755. In definitiva, sto cercando di elencare tutti i file con privilegi maggiori di (e non uguali a) 755 usando stat -c '%a %n' * e poi reindirizzare ad alcuni grep'ing (o eventualmente sed'ing?) Per ottenere questo elenco finale. Qualche idea su come questo possa essere realizzato al meglio?Linee di apertura per numeri maggiori del numero dato

+2

Poiché '755' è davvero un numero ottale che rappresenta una sequenza di bit, cosa significa esattamente" maggiore di "? '666' consente a tutti di accedere in scrittura; è "maggiore di" 755? '755'" maggiore di "' 666'? –

+0

Utenti OS X: l'equivalente di 'stat -c '% a% n' *' (Linux) sembra essere 'stat -f '% Lp% N' *' – mklement0

+0

la persona chiede grep, mentre le persone continuano a dare awk? – Soncire

risposta

20

provare questo:

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

se si desidera solo il nome del file nel vostro output finale, saltare i numeri di privilegio, si potrebbe:

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

EDIT

in realtà si potrebbe fare il chmod in awk. ma dovresti assicurarti che l'utente che esegue la linea di awk abbia il permesso di cambiare quei file.

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

di nuovo, si supponga che il nome file non abbia spazi.

+0

Oh grazie per quel piccolo add-on. Stavo per tagliare il campo 2, ma il tuo lo realizza in un tubo in meno! – user2150250

+0

Attenzione ai nomi di file con spazi. –

+1

@ user2150250 nota, il mio secondo awk one-liner presuppone che il nome file non abbia spazio. – Kent

5

userei awk(1):

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

Il modello awk corrisponde linee in cui il primo campo è maggiore di 755. Si potrebbe aggiungere un'azione se si desidera stampare un sottoinsieme di una linea o di qualcosa di diverso, troppo (vedi @ risposta di Kent).

3

grepsed sono buoni in aritmetica. awk potrebbe aiutare (purtroppo non lo so). Ma nota che find può essere utile anche qui:

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

Così che cosa potrebbe funzionare per voi è:

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

è sufficiente rimuovere la parte -printf se è necessario solo i nomi dei file.

Problemi correlati