Shell: verifique se existe um subdiretório e execute o comando

1

Eu tenho uma estrutura de diretórios como esta:

incoming--
         |--sub-P001--|
                      |--func
                      |--anat
         |--sub-P002--|
                      |--anat
         | ....

Para cada subdiretório, preciso verificar se ele contém um subdiretório chamado func e, em caso afirmativo, execute o comando fmriprep-docker , senão execute outro comando.

Eu tentei este código, mas ficou preso:

    if [ -d $mnt/data/service/incomning/$sub-P*/func ] ; then
        fmriprep-docker run -it ... /mnt/data/service/incoming

    else: 
        fmriprep-docker run -it --anat-only /mnt/data/service/incoming
        fy
    fy
    
por Relyativist 01.09.2018 / 13:43

1 resposta

1

Você não pode verificar vários nomes de caminho de uma só vez em uma única instrução if como essa. Em vez disso, você teria que fazer uma iteração nas pastas pai e testar cada uma delas se contiver um diretório func :

for directory in "$mnt"/data/service/incomning/sub-P*/; do
    if [ -d "$directory"/func ]; then
        (cd "$directory" && fmriprep-docker run -it ...)
    else
        (cd "$directory" && fmriprep-docker run -it --anat-only)
    fi
done

ou algo semelhante (não sei o que esta ferramenta fmriprep-docker faz ou como é usada).

    
por 01.09.2018 / 13:52