Shell:サブディレクトリがあることを確認してからコマンドを実行します。

Shell:サブディレクトリがあることを確認してからコマンドを実行します。

次のディレクトリ構造があります。

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

各サブディレクトリに名前付きサブディレクトリが含まれていることを確認する必要があります。含まれている場合はfunccommand を実行し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またはこれと似ています(このツールの機能や使用方法がわかりません)。

おすすめ記事