Altera o diretório para o local de um arquivo em find e, em seguida, executa um script dois níveis acima (como se estivesse no mesmo diretório) - bash

0

O problema:

Oi, estou tentando fazer o loop de cada arquivo * .faa em vários diretórios (por exemplo, / path / to / *. faa)

E então, usando um script (./script.py) como se o script estivesse no mesmo diretório que o arquivo * .faa, isso é possível com shellscript?

O que eu tentei:

for FAA in $(find . -name "*.faa")
do
    cd ../$FAA
    python3 ../script.py
done

Eu tentei variações sobre isso, mas mudar para o diretório para um arquivo não funciona, mas eu não sei como chegar a esse diretório.

Saída desejada:

Para cada arquivo .faa, em vários diretórios, por exemplo, /path/to/1.faa, caminho / 2 / 2.faa, execute o script no diretório dois níveis acima. Como se estivesse no mesmo diretório que cada um dos arquivos * .faa, ou se isso não for possível, qual é a melhor solução para alcançar algo semelhante?

    
por Biomage 06.07.2018 / 11:59

1 resposta

0
find . -type f -name '*.faa' -execdir python3 ../script.py ';'

Isso executaria python3 ../script.py com o diretório de cada arquivo encontrado como diretório de trabalho.

Como suas palavras e seu código são conflitantes, não sei se devem ser ../script.py ou ../../script.py .

Observe também que isso só funcionaria se o arquivo script.py estivesse realmente disponível no diretório indicado. Pode ser mais seguro fornecer um caminho absoluto para o arquivo de script:

find . -type f -name '*.faa' -execdir python3 /path/to/script.py ';'

O texto acima executaria o script para cada arquivo encontrado, mesmo se houver vários arquivos .faa em um diretório. Para executar o script apenas uma vez para cada diretório que tenha pelo menos um arquivo .faa :

find . -type d -exec sh -c '
    for dir do
        set -- "$dir"/*.faa
        if [ "$#" -gt 0 ]; then
            ( cd "$dir" && python3 /path/to/script.py )
        fi
    done' sh {} +

Isso executaria um script de shell curto para cada diretório encontrado. O script exibe no diretório para ver se há algum arquivo .faa lá. Se houver, o script Python é executado com esse diretório como diretório de trabalho.

Relacionados:

por 06.07.2018 / 12:06