Encuentra nombres de archivos ejecutables sin ruta

9

Tengo una carpeta con muchos ejecutables y quiero omitir la ruta en los resultados del comando find. Este comando muestra los archivos que quiero ver, pero también enumera la ruta; Solo quiero el nombre del archivo.

find /opt/g09 -maxdepth 1 -executable

¿Cómo puedo obtener la salida de find para mostrar solo los nombres de archivo y no la ruta completa?

j0h
fuente

Respuestas:

10

O usar:

find /opt/g09 -maxdepth 1 -executable -printf "%f\n"

agregar la -type fbandera también funciona aquí.

Del findmanual:

 %f     File's name with any leading directories removed (only the last element).

Esta respuesta solo requiere que tenga GNU, findmientras que otros requieren otros programas para manipular sus resultados.

nixpower
fuente
-tipo f ¡Eso es lo que estaba tratando de pensar! Gracias coding man!
j0h
@ j0h no es un problema!
nixpower 01 de
6

Uso basename:

find /opt/g09 -maxdepth 1 -executable -exec basename {} \;

De man basename:

Print NAME with any leading directory components removed.

También está intentando findtodo, para restringir su búsqueda a solo archivos, use:

find /opt/g09 -type f -maxdepth 1 -executable -exec basename {} \;
heemayl
fuente
3

La solución más obvia para mí es

(cd /opt/g09; find -maxdepth 1 -executable)

Como inicia una subshell, permanece en el mismo directorio. La ventaja de este método es que no necesita análisis. La desventaja es que comienzas un subshell (aunque no lo sentirás).

Bernhard
fuente
1
Es una idea inteligente.
AB
1

Con awk, dividiendo la ruta por el delimitador /, imprima la última sección ( $NF):

find /opt/g09 -maxdepth 1 -executable | awk -F/ '{print $NF}'
Jacob Vlijm
fuente
¿Dónde está tu versión de Python hermano? ;)
Sergiy Kolodyazhnyy
@Serg jaja, tuve que atarme los dedos :)
Jacob Vlijm
1

Usando una combinación de findyperl

find /opt/g09 -maxdepth 1 -type f -executable | perl -pe 's/.+\/(.*)$/\1/'
AB
fuente
Gran manera de aprender algo de Perl: P
nixpower