O que significa um ponto de interrogação em um padrão de correspondência de nome de arquivo?

1

O que significa o ponto de interrogação neste comando?

find . –type d –name "?d*" –print

Eu tentei executá-lo sem ele, mas não notei nenhuma alteração.

    
por user729975 27.03.2013 / 18:38

3 respostas

2

O ponto de interrogação corresponde exatamente a um caractere em um nome de arquivo. Então,

find -name "c?t"

corresponderá a cat e cot , mas não a coat ou ct .

Por que vale a pena, esta é uma convenção muito comum para a correspondência de nomes de arquivos, e pode ser usada em uma variedade de contextos de interface de linha de comando, mesmo no Windows ' cmd .

A remoção do ponto de interrogação deve fazer diferença, a menos que, de qualquer maneira, nada seja correspondido.

    
por 27.03.2013 / 19:35
2

O padrão "?d*" in find . -type d -name "?d*" -print é interpretado pelo find (como é declarado corretamente pelo depósito), não pelo shell, e corresponderá a todos os diretórios que possuem um segundo caractere d , mesmo se o primeiro caractere é um .

Por exemplo, se houver os diretórios .dad , ada e xd , o comando find imprimirá

./.dad
./ada
./xd

enquanto o comando shell echo ?d* (onde o padrão? d * é interpretado pelo shell) pelo menos seria impresso (haveria e os nomes de quaisquer arquivos correspondentes ao padrão)

ada xd

Por outro lado, se não houver diretórios com um segundo caractere d , o resultado não produzirá nenhuma saída em contraste com o comando shell que imprimiria

?d*
    
por 28.03.2013 / 02:44
0

O ponto de interrogação é identificado pelo shell como um único caractere. Neste caso, o nome é especificado como qualquer diretório com o segundo caractere do nome do diretório 'd', seguido por quaisquer outros caracteres.

find não produziu nada porque não havia nomes de diretório que correspondessem à especificação -name.

    
por 27.03.2013 / 19:37