Quando uso find
, geralmente encontra vários resultados, como
find -name pom.xml
./projectA/pom.xml
./projectB/pom.xml
./projectC/pom.xml
Muitas vezes, quero selecionar apenas um resultado específico (por exemplo edit ./projectB/pom.xml
). Existe uma maneira de enumerar a find
saída e selecionar um arquivo para passar para outro aplicativo? gostar:
find <print line nums?> -name pom.xml
1 ./projectA/pom.xml
2 ./projectB/pom.xml
3 ./projectC/pom.xml
!! | <get 2nd entry> | xargs myEditor
?
[Edit] Eu esbarrei em alguns erros perculiares com algumas das soluções mencionadas. Então, eu gostaria de explicar as etapas para reproduzir:
git clone http://git.eclipse.org/gitroot/platform/eclipse.platform.swt.git
cd eclipse.platform.swt.git
<now try looking for 'pom.xml' and 'feature.xml' files>
[Editar] Solução 1 Até agora, uma combinação de 'nl' (saída enumirada), cabeça e cauda parece funcionar se eu as combinar em funções e usar $ (!!).
ou seja:
find -name pom.xml | nl #look for files, enumirate output.
#I then define a function called "nls"
nls () {
head -n $1 | tail -n 1
}
# I then type: (suppose I want to select item #2)
<my command> $(!!s 2)
# I press enter, it expands like: (suppose my command is vim)
vim $(find -name pom.xml |nls 2)
# bang, file #2 opens in vim and Bob's your uncle.
[Editar] Solução 2 O uso de "select" também parece funcionar muito bem. ex:
findexec () {
# Usage: findexec <cmd> <name/pattern>
# ex: findexec vim pom.xml
IFS=$'\n';
select file in $(find -type f -name "$2"); do
#$EDITOR "$file"
"$1" "$file"
break
done;
unset IFS
}
Your find command | head -TheNumberYouWant
cumprindo seus requisitos? (Com sua linha:!! | head -2 | xargs myEditor
)Respostas:
Use
bash
internoselect
:Para a pergunta "bônus" adicionada no comentário:
fonte
select
parece não agradar muito a alteraçãoIFS
.( IFS=$'\n'; select file in $(find -maxdepth 2 -name '*.txt'); do echo "$file"; done; )
Duas pequenas funções ajudarão você a resolver isso, desde que seus nomes de arquivos não contenham novas linhas ou outros caracteres que não sejam de impressão. (Ele lida com nomes de arquivos que contêm espaços.)
Exemplo
fonte
pom.xml
nunca conterá espaços em branco (:findnum
?você pode obter a cabeça do total de saídas e segui-lo com -1. isso pode canalizar a saída em qualquer outro comando ou editor, por exemplo.
(consiga-me 100 linhas e imprima-me no último tubo os 100) encontre. | cabeça -100 | cauda -1
você obterá a 100ª linha de busca.
fonte
Se seu objetivo é editar arquivos depois de uma pesquisa, tente sag / sack .
Exemplo:
... para editar o último resultado da pesquisa ....
A vantagem é que você pode voltar depois editar o primeiro resultado da pesquisa com
fonte