Como obter apenas nomes do comando find sem caminho

10

Estou tentando obter apenas os nomes do resultado da pesquisa usando o find, mas ele também inclui os diretórios. Como posso imprimir apenas os nomes (ou atribuir a uma variável) usando o find

find trunk/messages/ -name "*.po" -printf '%f\n'

um comando semelhante para atribuir isto a uma variável, e. "recurso" para usá-lo mais tarde.

EDIT: E, se possível, apenas o nome excluindo a extensão.

    
por wakeup 02.03.2013 / 15:29

3 respostas

18

Use find trunk/messages/ -name "*.po" -exec basename {} .po \;

Exemplo e explicações:

Crie alguns arquivos de teste:

$ touch test1.po  
$ touch test2.po  
$ find . -name "*.po" -print
./test1.po  
./test2.po

Ok, os arquivos são encontrados, incluindo o caminho.

Para cada resultado, execute basename e retire a parte .po do nome

$ find . -name "*.po" -exec basename \{} .po \;  
test1  
test2
    
por 02.03.2013 / 15:37
4

Você pode usar o parâmetro -execdir , que imprimiria o arquivo sem caminho, por exemplo:

find . -name "*.po" -execdir echo {} ';'

Arquivos sem extensões:

find . -name "*.txt" -execdir basename {} .po ';'

Nota: Como não é POSIX, o BSD find imprime nomes de arquivos limpos, mas o uso do GNU find imprime ./ extra.

Veja: Por que o comando GNU find -execdir se comporta de maneira diferente do encontrado pelo BSD?

    
por 22.12.2015 / 00:16
0

Baseado em um comando que encontrei aqui: link

Você poderia fazer isso usando sed (que foi executado mais rapidamente para mim do que a abordagem basename ):

find trunk/messages/ -name "*.po" | sed 's!.*/!!' | sed 's!.po!!'
    
por 16.10.2016 / 21:13

Tags