Linux/Unix パスで後方に反復処理する必要がある

Linux/Unix パスで後方に反復処理する必要がある

複数のパス (フォルダー名) を持つスクリプトがあります。

各フォルダー パスには Dockerfile がありますが、そのファイルがどのレベルに存在するかは不明です。

私の道は「v1/エアフロー/1.86/src/コード/」

しかし、ファイルは例えば「v1/エアフロー/1.86/src/Dockerfile」または、「v1/エアフロー/1.86/Dockerfile」

だから私は一歩後退したりCD ../ そこにファイルが存在するかどうかを再帰的にチェックし、存在しない場合は 1 つ前のディレクトリに戻って再度確認し、存在する場合はそれ以上確認を中止します。

ご協力いただければ幸いです

答え1

手っ取り早い解決策:

dirs=$(echo v1/airflow/1.86/src/code/ | tr '/' ' ')
path=""
for element in ${dirs[@]}
do
    if [[ -z "$path" ]]; then path=$element; else path="$path/$element"; fi
    printf "%s\n" "$path"
    [[ -e "${path}/Dockerfile" ]] && printf "Found it!\n"
done

これは上から下へチェックします。配列の順序を逆にするのはそれほど難しくありません。

関連情報