Como posso canalizar a saída de “find” para “cd”?

6

O que devo fazer para procurar um arquivo na lista de pastas e alterar o diretório atual para o diretório do arquivo?

eu tentei find -name script.py | cd mas não funcionou (não que eu estivesse esperando).

Obrigado por ajudar!

    
por vybhav 15.04.2014 / 04:56

2 respostas

10

cd não lê de stdin, portanto você não pode enviar um nome de pasta para ele. Mas você pode usar "$(...)" para usar a saída de um comando como um argumento para cd :

cd "$(find -name script.py -type f -printf '%h\n' -quit)"

-printf '%h\n' informa find para a saída apenas para pastas que contenham os arquivos.

-quit diz a find para sair depois de encontrar o primeiro arquivo correspondente.

    
por Florian Diesch 15.04.2014 / 05:09
5

Você pode usar este código:

cd "$(dirname "$(find / -type f -name test | head -1)")"

Onde, como você pode ver, irá procurar a partir do topo do diretório raiz com o comando find / , então listará os arquivos regulares chamados test - name test , e por último ele irá mudar para o diretório.

Observação: a passagem por meio de head -1 filtrará todos menos o primeiro.

dirname - tira o sufixo de não diretório do nome do arquivo

cd alterar o diretório

    
por nux 15.04.2014 / 05:05