Terminal: Ir para o diretório encontrado com o find

3

Esta parece ser uma questão óbvia para mim, mas não consigo encontrar a resposta ... Presumo que eu quero encontrar um determinado arquivo txt no meu projeto e no Terminal tipo I:

find -name test.txt

Como resultado, posso conseguir algo como:

./directory1/directory2/directory3/directory4/test.txt

Como eu pulo para directory4 sem ter que digitar o caminho completo?

    
por Ludder 23.01.2013 / 13:42

2 respostas

3

Eu usaria o suporte ao histórico do bash para fazer isso. Após qualquer comando, você pode referenciá-lo novamente com !! :

[jk@pecola tmp]$ find . -name test.text
./directory1/directory2/directory3/test.text

Para executar um ls -l na saída do último comando:

[jk@pecola tmp]$ ls -l $(!!)
ls -l $(find . -name test.text)
-rw-rw-r-- 1 jk jk 0 Jan 23 20:49 ./directory1/directory2/directory3/directory4/test.text

Neste exemplo, usamos a sintaxe $(...) para usar a saída do comando como um argumento para outro comando.

Como !! faz referência ao último comando executado, agora precisamos ser mais específicos se quisermos executar novamente o comando find, já que executamos ls since. Podemos usar a sintaxe !<match> para executar novamente o último comando iniciado com <match>

[jk@pecola tmp]$ dirname $(!find)
dirname $(find . -name test.text)
./directory1/directory2/directory3

[jk@pecola tmp]$ cd $(dirname $(!find))
cd $(dirname $(find . -name test.text))

[jk@pecola directory4]$ ls
test.text

Eu também acho isso útil para reutilizar comandos para os quais você precisa de sudo:

[jk@pecola tmp]$ adduser newuser
adduser: Only root may add a user or group to the system.

[jk@pecola tmp]$ sudo !!
sudo adduser newuser
    
por Jeremy Kerr 23.01.2013 / 14:01
0

Se a sessão de terminal estiver dentro de uma GUI, você pode selecionar o texto com o mouse (botão esquerda ) e colar o texto inteiro na posição do cursor de texto, clicando no meio     

por guntbert 23.01.2013 / 15:01