Como obter apenas nomes do comando find sem caminho


14

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

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

um comando semelhante para atribuir isso a uma variável, por exemplo, "recurso" para usá-lo posteriormente.

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

Respostas:


20

Usar 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 basename, execute e retire a parte .po do nome

$ find . -name "*.po" -exec basename \{} .po \;  
test1  
test2

Muito obrigado :). Posso retirar apenas a extensão do PO dos dirs? Quero dizer: dir1 / po1.po e dir2 / po2.po eles podem ser obtidos como dir1 / po1 e dir2 / po2?
wakeup 02/02

@ user1754665find . -name '*.po' -exec bash -c 'echo ${0%.po}' {} \;
slhck

@slhck thanks. por fim, preciso obter o nome do arquivo sem extensão e a última pasta em que está: por exemplo: dir1 / subdir1 / subsubdir1 / po1.po e dir2 / subdir2 / subsubdir2 / po2.po devem ser configurados para uma variável como: subsubdir1 / po1 subsubdir2 / po2, respectivamente.
wakeup 02/02

@ user1754665 Hmm, talvezfind . -name '*.po' -type f -exec sh -c 'echo $(basename $(dirname $0))/$(basename $0)' {} \;
slhck 2/13

@Hennes Qual é o objetivo da barra invertida antes da última faixa find?
Utku


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.