Lignes Grep pour les nombres supérieurs à un nombre donné

j'essaie de grep pour les lignes dans le premier champ d'une sortie qui sont plus grandes qu'un nombre donné. Dans ce cas, ce nombre est 755. En fin de compte, ce que je fais est d'essayer de lister tous les fichiers avec des privilèges supérieurs à (et pas égaux à) 755 en utilisant stat -c '%a %n' * et ensuite passer à un certain grep'ING (ou peut-être sed ' ing?) pour obtenir cette liste. Toutes les idées de comment cela a pu se faire?

21
demandé sur Kent 2013-05-01 02:24:15

3 réponses

essaye ceci:

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

si vous voulez juste le nom du fichier dans votre sortie finale, sautez les numéros de privilèges, vous pouvez:

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

EDIT

en fait, vous pourriez faire l' chmod dans les limites de awk. mais vous devez vous assurer que l'utilisateur exécute la ligne awk a la permission de changer ces fichiers.

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

encore une fois, supposons que le nom du fichier n'a pas d'espaces.

24
répondu Kent 2015-01-08 12:40:02

j'utilise awk(1):

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

awk le motif correspond aux lignes où le premier champ est plus grand que 755. Vous pouvez ajouter une action si vous voulez imprimer un sous-ensemble d'une ligne ou quelque chose de différent, trop (Voir @Kent réponse).

5
répondu Carl Norum 2013-04-30 22:32:34

ni L'un ni l'autre grep ni sed sont bons en arithmétique. awk pourrait aider (malheureusement je ne sais pas). Mais notez que find peut être utile ici aussi:

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

alors ce qui pourrait marcher pour vous est:

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

il suffit de supprimer le -printf partie si vous n'avez besoin que de noms de fichiers.

3
répondu Lev Levitsky 2013-04-30 22:38:37