Estoy tratando de grep para líneas en el primer campo de una salida que son mayores que un número dado. En este caso, ese número es 755. En última instancia, lo que estoy haciendo es tratando de lista de cada archivo con privilegios de mayor que (y no es igual a) 755 mediante stat -c '%a %n' * y, a continuación, tubería para algunos grep ing (o, posiblemente, sed ing?) para obtener la lista final. Alguna idea de cómo esto podría lograrse mejor?

  • Desde 755 es realmente un número octal que representa una secuencia de bits, ¿qué significa exactamente «mayor que» significa? 666 da a todos el acceso de escritura; es que la «mayor que» 755? Es 755 «mayor que» 666?
  • OS X: El equivalente de stat -c '%a %n' * (Linux) parece ser stat -f '%Lp %N' *
  • la persona que está pidiendo grep, mientras que la gente sigue dando de awk?
InformationsquelleAutor user2150250 | 2013-04-30

3 Comentarios

  1. 26

    intente esto:

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

    si sólo quieres el nombre de archivo en el resultado final, omita el privilegio de números, usted podría:

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

    EDITAR

    realmente podría hacer la chmod dentro de awk. pero usted debe asegurarse de que el usuario ejecute el awk línea tiene el permiso para cambiar los archivos.

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

    de nuevo, asume el nombre de archivo no tiene espacios.

    • Oh gracias por ese pequeño add-on. Que me iba a cortar el campo 2, pero el tuyo logra en menos de tubo!
    • Reloj hacia fuera para los nombres de archivo con espacios.
    • tenga en cuenta que mi 2º awk one-liner se supone que el nombre de archivo no tiene espacio.
    • ja… 20 segs.. sólo quería recordar OP lo mismo
    • Jaja, sí, yo no tiene que preocuparse acerca de los espacios en los nombres de archivo, pero gracias por la sugerencia!
    • Puedo hacerle una pregunta más? ¿Cómo podría yo tubería esta lista de archivos a un chmod 755 así chmod todos los archivos en la salida?
    • Sólo añadir | xargs chmod 755 a la línea de comandos.
    • Norum Hmm … por alguna razón que no está funcionando para mí. Eso es lo que yo estaba tratando originalmente pero no parece ser correctamente el cambio de permisos en los archivos en mi lista. Mi comando completo es cat /etc/shells | xargs stat -c '%a %n' | awk '$1>755{print $2}' | xargs chmod 755
    • Usted probablemente no quiere una comparación numérica con 755 aquí — por ejemplo, la 770 es numéricamente mayor que 755, pero 707 y 077 son numéricamente menos. También, si lo que realmente quieres hacer es quitar el acceso de escritura para el grupo y otros, sólo tiene que utilizar chmod go-w.
    • chmod 755 debería funcionar. tiene el uso actual permiso para cambiar los shell archivos?
    • realmente podría hacer el chmod dentro de awk, consulte la EDICIÓN en ansewr.
    • Gracias por las respuestas excelentes y útiles comentarios.

  2. 6

    Yo uso la awk(1):

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

    La awk coincidencias de patrón de líneas donde el primer campo es mayor, entonces 755. Usted puede agregar una acción si desea imprimir un subconjunto de una línea o algo diferente (Véase @Kent respuesta).

  3. 3

    Ni grep ni sed son buenos en la aritmética. awk podría ayudar (por desgracia yo no lo saben). Pero tenga en cuenta que find puede ser útil aquí:

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

    Entonces, ¿qué podría trabajar para usted es:

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

    Acaba de quitar el -printf parte, si usted sólo necesita los nombres de archivo.

Dejar respuesta

Please enter your comment!
Please enter your name here