Shell: 하위 디렉터리가 있는지 확인한 후 명령을 실행합니다.

Shell: 하위 디렉터리가 있는지 확인한 후 명령을 실행합니다.

다음과 같은 디렉토리 구조가 있습니다.

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

각 하위 디렉터리에 대해 이름이 지정된 하위 디렉터리가 포함되어 있는지 확인해야 하며, func포함되어 있으면 command 를 실행하고 fmriprep-docker, 그렇지 않으면 다른 명령을 실행합니다.

이 코드를 시도했지만 중단되었습니다.

    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

답변1

if이와 같은 단일 명령문에서 여러 경로 이름을 동시에 확인할 수는 없습니다. 대신 상위 폴더를 반복하고 각 폴더에 디렉터리가 포함되어 있는지 테스트해야 합니다 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

fmriprep-docker또는 이와 유사한 것(이 도구의 기능이나 사용 방법을 모릅니다 ).

관련 정보