Use “find” de um diretório relativo específico [closed]

1

Suponha que eu esteja no seguinte diretório:

/A-dir/B-dir/mydir/… some directories …/x-dir

Eu quero que find pesquise em mydir , mas mydir não é especificamente conhecido antecipadamente; ele é definido pelo diretório de trabalho atual, como sendo o primeiro diretório vindo depois de /A-dir/B-dir/ (esse caminho é especificado explicitamente) ao "subir" do diretório de trabalho atual. Dessa forma, find pesquisará mydir , mas nenhum outro diretório em B-dir (caso contrário, eu poderia usar apenas

find /A-dir/B-dir/ -name … …

).

    
por snurden 03.12.2015 / 11:12

2 respostas

3
find "${PWD%"${PWD#/A-dir/B-dir/*/}"}" ...

(o primeiro componente de diretório em $PWD após /A-dir/B-dir )

Ou:

find "${PWD%"${PWD#/*/*/*/}"}" ...

(os primeiros 3 componentes do diretório)

Ou:

find "${PWD%"${PWD#/*/B-dir/*/}"}" ...

(o primeiro componente do diretório após a ocorrência mais à esquerda de um componente B-dir em $PWD ).

Com zsh , você também pode fazer:

find ${(M)PWD#/*/B-dir/*/}
    
por 03.12.2015 / 16:14
0

Algo parecido com isso pode ser o que você está procurando:

#!/bin/bash
last="${PWD/*\/}"
while test / != "$PWD"
do
    cd ..
    this="${PWD/*\/}"
    if test 'B-dir' = "$this"
    then
        find "$last" ...
        break
    fi
    last="$this"
done

Pressupõe que você está começando em /A-dir/B-dir/mydir/... some directories .../x-dir e sobe na árvore até alcançar B-dir . Neste ponto, ele executa o comando find mydir... para qualquer valor de mydir preceded B-dir .

O diretório atual ( PWD ) é atualizado enquanto o script está sendo executado. Não seria muito difícil evitar a alteração de diretório manipulando uma cadeia de caminho de diretório em vez do uso implícito de $PWD , mas optei por implementá-la dessa maneira.

    
por 03.12.2015 / 13:50