Por que o ponto nos comandos find?


14

Normalmente, vemos findcomandos que se parecem com isso:

$ find . -name foo.txt

quando a pesquisa começar no diretório atual. Estou descobrindo que nas minhas máquinas (Ubuntu, Cygwin) eu obtenho os mesmos resultados sem o ponto.

Por que normalmente está incluído? É apenas uma convenção a ser explícita ou foi / é exigida em certos sistemas?

Respostas:


27

Algumas versões * do findexigem que você forneça um argumento de caminho, que é um diretório a partir do qual iniciar a pesquisa. O ponto .simplesmente representa o diretório atual onde geralmente você deseja pesquisar.

Você pode substituir isso por qualquer caminho que você queira que seja a base da pesquisa. Em algumas versões do find, isso pode ser deixado porque o diretório atual está implícito se nenhum argumento de caminho estiver presente.

Você pode executar man findno seu shell para obter detalhes sobre os argumentos. Por exemplo, a sinopse de uso da minha indica que o argumento do caminho é opcional (entre colchetes []):

   find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

Se você executasse o meu findsem argumentos em todos os arquivos e diretórios iniciados na pasta atual, seria retornado. Seu exemplo simplesmente declara expressamente que a pesquisa deve começar .e inclui a expressão -name foo.txtcomo um dos filtros de pesquisa.

* Notavelmente todas as variantes do BSD e qualquer coisa que atenha estritamente ao padrão POSIX . A localização do GNU permite que seja opcional.


1
Você sabe de imediato quais versões do find exigem isso? Ou onde eu poderia procurar investigar mais? (descoberta é difícil google)
Eric Wilson

Coisa interessante sobre o caminho de pesquisa padrão.
rozcietrzewiacz

2
Acredito que a maioria das variantes de localização do BSD exigem um argumento de caminho, enquanto no GNU o consideram opcional. Podem existir variações.
Caleb

2
Observe que, pelo menos nas especificações padrão do POSIX de 2008, pathé um argumento necessário para encontrar .
Caleb

1
Nit pick: “Você pode substituir este [o ponto] por qualquer caminho que você quiser” → “qualquer caminho que você quiser”, como você pode dizer find dir1 dir2 dir3 -name foo.txt.
G-Man diz 'Reinstate Monica'

5

A versão AIX do find, por exemplo, requer o caminho e não será executado se não for fornecido.

# oslevel -s
5300-08-03-0831
# find -name bob
Usage: find [-H | -L] Path-list [Expression-list]

# oslevel -s
6100-03-01-0921
# find -name bob
Usage: find [-H | -L] Path-list [Expression-list]

Embora algumas máquinas AIX possam ter uma localização GNU instalada, que pode lidar sem o caminho,

# oslevel -s
6100-03-01-0921
# /opt/freeware/bin/find -version
GNU find version 4.1
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.