¿Cómo puedo encontrar solo los archivos ejecutables en un determinado directorio en Linux?
linux
command-line
bash
find
HaiYuan Zhang
fuente
fuente
file
comando estándar ?ls -l | egrep '^[^d]..x..x..x.*$'
Lo anterior enumerará todos los ejecutables (para todos / usuario y grupo) en el directorio actual. Nota : La-executable
opción no funciona en una Mac, de ahí la solución anterior.-rwxr-x---
), que todavía es ejecutable para algunos usuarios.Respuestas:
La búsqueda de archivos ejecutables se puede hacer con
-perm
(no recomendado) o-executable
(recomendado, ya que tiene en cuenta ACL). Para usar la-executable
opción:si desea encontrar solo archivos ejecutables y directorios no buscables, combine con
-type f
:fuente
-type x
tampoco.find: invalid predicate -executable'
en RHELUsa la
-perm
opción de búsqueda . Esto encontrará archivos en el directorio actual que sean ejecutables por su propietario, por miembros del grupo o por otros:Editar:
Acabo de encontrar otra opción que está presente al menos en GNU find 4.4.0:
Esto debería funcionar aún mejor porque también se consideran las ACL.
fuente
find: invalid mode
/ u = x, g = x, o = x'`-perm /111
puede ser la versión más portátil.Sé que la pregunta menciona específicamente a Linux, pero dado que es el primer resultado en Google, solo quería agregar la respuesta que estaba buscando (por ejemplo, si usted, como yo en este momento, es forzado por su empleador a usar un GNU no / Sistema Linux).
Probado en macOS 10.12.5
fuente
Tengo otro enfoque, en caso de que lo que realmente quiera sea hacer algo con archivos ejecutables, y no necesariamente forzar a find a que se filtre a sí mismo:
Prefiero esto porque no depende de
-executable
cuál es la plataforma específica; y no depende de-perm
cuál es un poco arcano, un poco específico de la plataforma, y como está escrito anteriormente requiere que el archivo sea ejecutable para todos (no solo para usted).Esto
-type f
es importante porque en los directorios * nix tienen que ser ejecutables para ser transitables, y cuanto mayor sea la consulta en elfind
comando, más eficiente será la memoria de su comando.De todos modos, solo ofrecemos otro enfoque, ya que * nix es la tierra de mil millones de enfoques.
fuente
find -perm
, encuentra los archivos que tienen cualquier ejecutar conjunto de permisos bits. (2) Por el contrario, esta respuesta solo encuentra archivos para los que el usuario actual tiene permiso de ejecución. De acuerdo, eso podría ser lo que quiere el OP, pero no está claro. ... (Continúa)`…`
a$(…)
- vea esto , esto y esto . (4) Pero no lo hagasfor i in $(find …); do …
; falla en los nombres de archivo que contienen espacios. En cambio, hazlofind … -exec …
. (5) Y, cuando trabaje con variables de shell, cítelas siempre (entre comillas dobles) a menos que tenga una buena razón para no hacerlo y esté seguro de saber lo que está haciendo.-perm
argumento que requería los tres, no uno de ellos. Además, gracias por el aporte en la protección de los argumentos de shell, eso es todo lo que no conocía.for i in
buscar. -tipo f; do [ -x $i ] && echo "$i is executable"; done
; te falta la parte <dir>, que uso un punto (.)Un archivo marcado como ejecutable no necesita ser un archivo u objeto ejecutable o cargable.
Esto es lo que uso:
fuente
-name "*"
no tiene ningún efectofind
: normalmente encuentra todos los archivos que no se eliminan mediante pruebas.Como fanático del único trazador de líneas ...
Usando 'xargs' para tomar la salida del comando find (usando print0 para asegurar que los nombres de archivo con espacios se manejen correctamente). Ahora tenemos una lista de archivos que son ejecutables y los proporcionamos, uno por uno, como parámetro para el comando 'archivo'. Luego grep para el término ASCII para ignorar los binarios. Sustituya -executable en el comando find con el estilo que prefiera (consulte las respuestas anteriores) o lo que funciona en su sistema operativo 'NIX
Requerí lo anterior para encontrar archivos con eval en scripts propiedad de root, así que creé lo siguiente para ayudar a encontrar debilidades de escalada privada donde el usuario root ejecuta scripts con parámetros inseguros ...
fuente
file
informa la codificación, por lo que un script de Python se puede informar comoa /usr/bin/python script, UTF-8 Unicode text executable
.find ... | xargs file -b | grep -v '^ELF'
podría funcionar mejor para detectar los no binarios.Creé una función
~/.bashrc
esta noche para encontrar archivos ejecutables que no están en la ruta del sistema y no en los directorios:La ventaja es que buscará tres distribuciones de Linux y una instalación de Windows en menos de un segundo, donde el
find
comando tarda 15 minutos.Por ejemplo:
O para un directorio completo y todos sus subs:
fuente