Encontre nomes de arquivos executáveis ​​sem caminho

9

Eu tenho uma pasta com muitos executáveis ​​e quero omitir o caminho nos resultados do comando find. este comando mostra os arquivos que eu quero ver, mas também lista o caminho; Eu só quero o nome do arquivo.

find /opt/g09 -maxdepth 1 -executable

como posso obter a saída do find para mostrar apenas os nomes dos arquivos, e não o caminho completo?

j0h
fonte

Respostas:

10

Ou use:

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

adicionar a -type fbandeira também funciona aqui.

Do findmanual:

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

Esta resposta requer apenas que você tenha o GNU, findenquanto outros exigem outros programas para manipular seus resultados.

nixpower
fonte
-tipo f É o que eu estava tentando pensar! Obrigado, codificador!
J0h 01/07
@ j0h não é um problema!
Nixpower 01/07/2015
6

Use basename:

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

De man basename:

Print NAME with any leading directory components removed.

Além disso, você está tentando de findtudo, para restringir sua pesquisa apenas a arquivos, use:

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

A solução mais óbvia para mim é

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

Como você inicia um subshell, permanece no mesmo diretório. A vantagem desse método é que você não precisa analisar. A desvantagem é que você inicia um subshell (apesar de não sentir isso).

Bernhard
fonte
11
É uma ideia inteligente.
AB
1

Com awk, dividindo o caminho pelo delimitador /, imprima a última seção ( $NF):

find /opt/g09 -maxdepth 1 -executable | awk -F/ '{print $NF}'
Jacob Vlijm
fonte
Onde está sua versão python, mano? ;)
Sergiy Kolodyazhnyy
@Serg haha, eu tive que amarrar meus dedos :)
Jacob Vlijm
1

Usando uma combinação de findeperl

find /opt/g09 -maxdepth 1 -type f -executable | perl -pe 's/.+\/(.*)$/\1/'
AB
fonte
Ótima maneira de aprender um pouco de Perl: P
nixpower