Encuentre todos los archivos ejecutables dentro de una carpeta en la terminal

14

Tengo una carpeta myfolder que contiene una gran jerarquía de archivos / carpetas.
¿Cómo encontrar todos los archivos ejecutables dentro de esta carpeta?

En Ubuntu esto funciona: find . -executable -type f

Pero Mac OS X Mavericks (que también usa bash ) no lo consigue:

find: -executable: unknown primary or operator
    
pregunta Nicolas Raoul 08.01.2014 - 06:15

3 respuestas

21

Esto encontrará todos los archivos (no enlaces simbólicos) con el conjunto de bits ejecutables:

find . -perm +111 -type f

Esto también también encontrará enlaces simbólicos (que a menudo son igualmente importantes)

find . -perm +111 -type f -or -type l

Aquí es cómo funciona el comando si no es obvio:

  • find es obviamente el programa de búsqueda (:
  • . se refiere al directorio para comenzar a buscar en ( . = directorio actual)
  • -perm +111 = con cualquiera de los bits ejecutables establecidos ( + significa "cualquiera de estos bits", 111 es el octal para el bit ejecutable del propietario, grupo y cualquiera)
  • -type f significa que el tipo es un archivo
  • -or booleano O
  • -type l significa que el tipo es un enlace simbólico
respondido por el drfrogsplat 08.01.2014 - 07:01
5

No pude hacer que la respuesta de Ian funcionara (10.6.8), pero lo siguiente dio los resultados esperados:

find . -type f -perm +0111 -print

editar actualización

¡Esto parece funcionar también!

find . -type f -perm +ugo+x -print

Supongo que la "x" no tiene sentido sin el usuario / grupo / otros especificadores.

    
respondido por el Kent 08.01.2014 - 06:59
4

De la página del manual para encontrar en OS X :

 -perm [-|+]mode
         The mode may be either symbolic (see chmod(1)) or an octal number.  If the mode is symbolic, a
         starting value of zero is assumed and the mode sets or clears permissions without regard to the
         process' file mode creation mask.  If the mode is octal, only bits 07777 (S_ISUID | S_ISGID |
         S_ISTXT | S_IRWXU | S_IRWXG | S_IRWXO) of the file's mode bits participate in the comparison.
         If the mode is preceded by a dash (''-''), this primary evaluates to true if at least all of
         the bits in the mode are set in the file's mode bits.  If the mode is preceded by a plus
         (''+''), this primary evaluates to true if any of the bits in the mode are set in the file's
         mode bits.  Otherwise, this primary evaluates to true if the bits in the mode exactly match the
         file's mode bits.  Note, the first character of a symbolic mode may not be a dash (''-'').

Así que necesitas:

find . -type f -perm +0111 -print

Recuerde que OS X es basado en BSD , no en Linux, por lo que los comandos Gnu a los que está acostumbrado Las distribuciones de Linux (de las cuales find es una de ellas) no son necesariamente las mismas que en OS X. Esto no es una diferencia de shell, es una diferencia de herramientas de utilidad de sistema operativo / sistema operativo.

    
respondido por el Ian C. 08.01.2014 - 06:49

Lea otras preguntas en las etiquetas