Gostaria de executar o find
comando e obter alguns dos arquivos/diretórios no diretório da área de trabalho usando regex
a opção do comando com o símbolo circunflexo ^
Como você sabe, o cursor ^
corresponde ao início de uma linha, e eu gostaria de obter todos os arquivos/diretórios que começam com a letra t
; usei o seguinte comando find . -regex "^./t"
, mas, como descobri, ele só corresponderá ao arquivo/pasta cujo nome é um simples t !
Eu sei que o regex corresponderá ao whole path
e não somente ao file name
. Mas por que todos esses não correspondem, já que começam com ./t
.
./tcpdump.txt
./t.txt
./test.sh
./trade.txt
./torbrowser.desktop
./token.txt
PS: Esta regex funcionou para mim, ^./t.*
mas ainda não consigo entender o comportamento do cursor no comando original
O fato de que o regex sempre corresponde a todo o caminho significa que o cursor e o cifrão são redundantes: todo o caminho deve corresponder, não apenas sua substring. Ou você pode sempre imaginar que o regex começa com um cursor e termina com um cifrão, mesmo que você não os digite.
A
-regex
opção espera um padrão que corresponda ao caminho inteiro. Vejaman find
:O acento circunflexo não tem sentido neste contexto, pois, como explicado acima, o
-regex
terá que corresponder a tudo, então, essencialmente, o^
e$
estão implícitos.Você deu isso,
^./t
o que significa "procurar qualquer caractere" (lembre-se de que o.
significa "qualquer caractere" em expressões regulares, não significa um literal.
) seguido por a/
e então a única letrat
e nada mais.O que você precisa aqui é do
-name
operando, que pega globs e não expressões regulares, e só corresponde ao nome do arquivo, não ao caminho inteiro. Então, para encontrar todos os arquivos/diretórios cujo nome começa comt
, use:O glob
t*
significa "t seguido por 0 ou mais caracteres". Se você realmente quiser fazer isso com-regex
, embora isso só torne mais complicado, você precisaria especificar que permite que qualquer coisa venha depois dot
, assim:Essa expressão regular significa "corresponder a tantos caracteres quanto possível (incluindo 0) até o último
/
e depois at
seguido por qualquer outro.