Como eu posso combinar o comando find com outros comandos para não ter que navegar para a pasta?

7

Às vezes, quero executar determinados arquivos, mas não quero navegar até a pasta.

Se eu souber o nome do arquivo e find -name file_name.py retornar apenas um resultado, posso usá-lo?

Por exemplo, em vez de navegar até uma pasta específica e chamar:

python file_name.py

Posso escrever:

python [ find -name file_name.py ] 

ou

python [ locate file_name.py ]

Ou algum tipo de variante para "pesquisar todo o meu computador para esse nome de arquivo e usá-lo"? De preferência em uma linha.

    
por Charles Clayton 22.04.2014 / 00:11

5 respostas

12

Acho que você está procurando:

python $(find -name myscript.py)
    
por RobotHumans 22.04.2014 / 00:24
5

Adicione a linha shopt -s globstar ao arquivo .bashrc em seu diretório pessoal. (Para apenas tentar isso, digite isso na linha de comando, ele só terá efeito no seu shell atual.)

Em seguida, você pode usar **/ para significar "no diretório atual ou em um subdiretório e assim por diante de forma recursiva", ou seja, a mesma coisa que os comandos find simples.

python **/myscript.py

Ressalva: **/ atravessa links simbólicos para diretórios, enquanto find não. No bash, você não pode evitar isso. Em zsh, **/ está disponível imediatamente e não percorre links simbólicos (há ***/ para os casos raros em que você deseja percorrer links simbólicos).

    
por Gilles 22.04.2014 / 00:29
1

Só para mostrar que há sempre mais de uma maneira de fazer as coisas (mesmo sem usar o Perl):

find -name file_name.py -exec python {} \;

funcionará também. A opção exec de find executa o seguinte comando para cada arquivo que encontrar. Nesse comando, {} atua como um espaço reservado para o arquivo e \; significa o final do comando.

    
por Jos 22.04.2014 / 13:53
0

Você pode armazenar a saída de find em uma variável e fazer o que quiser com ela da seguinte maneira:

file='find -name file_name.py' && python $file

find -name file_name.py procurará arquivos com o nome file_name.py e armazenará o resultado em file variable e se o comando for bem sucedido (os resultados são obtidos sem erros), python interpreta $file .

    
por jobin 22.04.2014 / 00:25
0

Outro:

xargs -0 python < <(find -name my_script.py -print0 -quit)

Agora, como tarefa de casa, tente determinar os prós, contras e diferenças de todos os métodos apresentados aqui.

    
por gniourf_gniourf 22.04.2014 / 14:18