Outras questões sobre -path for find

0

De link

  1. -path does not (re)define the start path. It refers to the combination of the start path and the relative path of the currently examined object.

    • O "caminho inicial" significa o argumento path to find ?:

      find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
      
    • O que significa "combinação do caminho inicial e do caminho relativo do objeto examinado no momento"?

  2. You may by this e.g. find all files within a subdirectory src no matter on which level.

    Como é 'encontrar todos os arquivos dentro de um subdiretório src sem importar qual o nível "feito?

  3. "do not treat / or . specially" means that * can match both file names including the extension and into subdirectories: [...]/file* would match both /file.txt and /files/foo.bar

    "não tratar / ou especialmente" não menciona * , assim como "não tratar / ou. especialmente "aplica-se apenas a * ?

por Tim 04.05.2015 / 18:17

2 respostas

3

  1. Sim, "caminho inicial" significa um dos nomes de diretório que aparecem perto do início do comando find , depois das opções, mas antes da expressão. Eu interpreto a questão que você ligou como sugerindo que esse OP estava confuso sobre a diferença entre

    find /etc ...
    

    e

    find -path /etc ...
    
    • "It refers to the combination of the start path and the relative path of the currently examined object."

      Eu acho que o autor dessa resposta está imaginando que você tem um diretório chamado tools/crowbar , que contém arquivos drink , food , foolishness e wisdom . Se você disser

      find tools/crowbar -path "*bar/foo*"
      

      encontrará tools/crowbar/food e tools/crowbar/foolishness , mas não os outros dois.

  2. Eu concordo com o lcd047. Para colocar de outra forma, se você tem uma estrutura de diretórios como

    .
    ├───cat
    │   ├───dog
    │   │   └───kennel
    │   └───tac
    │       └───src
    ├───dest
    ├───original
    │   ├───recipe
    │   └───src
    └───src

    então

     find . -path "*/src/*"
    

    encontrará as coisas nas três pastas src (e em todos os seus subdiretórios) sem relatar coisas em cat , cat/dog , cat/dog/kennel , cat/tac , dest , original ou original/recipe .

  3. Ele ajuda a ler parágrafos inteiros, e não apenas a selecionar fragmentos de frases e esperar que façam sentido isoladamente. A discussão do teste -path em encontrar (1) diz,

    -path pattern

      File name matches shell pattern pattern.  The metacharacters do not treat '/' or '.' specially; so, for example,
      find . -path "./sr*sc"
      will print an entry for a directory called './src/misc' (if one exists).  ...

      OK, quando você vir "nome do arquivo", "padrão do shell", e "metacaracteres" todos na mesma linha, você é esperado para pensar em correspondência de padrões do shell / expansão de nome de caminho, que tem caracteres de padrão especiais * , ? e [ ... ] . ("Metacaractere" é basicamente uma palavra de US $ 10 para "caractere especial".) E então vai e mostra um exemplo com um * nele! Então você deve ser capaz de descobrir o que está falando.

      Então, o que isso está dizendo? Veja o exemplo: sr*sc corresponde a src/misc . Esta é uma diferença da expansão do nome do caminho no shell, onde você geralmente precisa usar algo como sr*/*sc para corresponder a src/misc . E não, isso não se aplica apenas a * ; -path "sr????sc" e -path "sr[cim/][cim/][cim/][cim/]sc" funcionam da mesma maneira.

      E o que eles não se incomodam em mencionar é que -path "*sr*sc" corresponderá não apenas src/misc mas também .src/misc e src/.misc ; mesmo que *sr*/*sc geralmente não corresponda àqueles (no shell) porque, na expansão do nome do caminho do shell, * geralmente não corresponde a nomes que começam com . .

    por 07.05.2015 / 11:48
    2

    Para evitar confusão, você provavelmente deve pensar no protótipo de find(1) da seguinte forma:

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

    find(1) encontra arquivos em dir . expression é uma expressão lógica formada por testes aplicados aos arquivos encontrados. -path , -name , -type são exemplos de tais testes.

    1. acima diz basicamente que -path não define dir , mas o argumento é considerado relativo a dir .

    2. diz que -path '*src*' corresponde tanto a ./src/foo/bar/test.c como a ./foo/src/bar/test.c , mas não a ./foo/bar/test.c .

    3. diz que * é um curinga e corresponde a diretórios. Ele também diz que você não deve confundi-lo com * do mundo DOS / Windows, onde você precisa escrever *.* para corresponder arquivos com "extensões".

    Ou pelo menos essa é a minha compreensão disso.

        
    por 04.05.2015 / 20:15

    Tags