find comando e parâmetro de caminho

1

Tendo a estrutura de arquivos assim:

/root/abc/1.txt
/root/abc/2.txt

e sentado no diretório /root .

1.) Por que o comando não:

find . -path "abc/*.txt"

não retorna resultados enquanto

find . -path "./abc/*.txt"

e

find . -path "*/abc/*.txt"

fazer obras?

2.) Qual é a diferença entre find . -path "./abc/*.txt" e find . -path "*/abc/*.txt"

    
por Mulligan 07.12.2016 / 18:00

2 respostas

2

Pergunta 1:

O parâmetro -path pattern corresponde ao nome do arquivo inteiro.

$ find
.
./abc
./abc/1.txt
./abc/2.txt

O padrão abc/*.txt não corresponde sem o primeiro ./ .

Pergunta 2:

O curinga * pode corresponder a qualquer sequência de qualquer comprimento (incluindo / e . caracteres). O parâmetro -path "*/abc/*.txt" tem dois curingas, por isso pode corresponder a qualquer um dos seguintes:

./abc/a.txt
*     *


./abc/ANYTHING.txt
*     ********

def/ghi/abc/SOMETHING.txt
*******     *********

./abc/def_dsa/faf.txt
*     ***********
    
por 07.12.2016 / 18:26
0

A frase a seguir é da opção -path no manual find :

Note that the pattern match test applies to the whole file name, starting from one of the start points named on the command line.

Isso explica por que seus padrões de pesquisa alternativos ( "./abc/*.txt" e "*/abc/*.txt" ) funcionam. Seu padrão de pesquisa original ( "abc/*.txt" ) funcionará somente se a raiz da pesquisa for abc :

find abc/ -path "abc/*.txt"

Quanto à diferença entre "./abc/*.txt" e "*/abc/*.txt" , nenhum deles tentará expandir a string antes de chamar find : o primeiro localizará arquivos apenas no diretório de nível superior ./abc/ , mas o segundo encontrará arquivos em qualquer subdiretório abc , como ./def/abc/ , ./ghi/def/abc/ , etc, bem como ./abc/ .

    
por 07.12.2016 / 18:36