Acho que você está procurando:
python $(find -name myscript.py)
À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.
Acho que você está procurando:
python $(find -name myscript.py)
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).
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.
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
.
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.
Tags command-line python find locate