動的に変更されるファイルのリストを繰り返す方法 - Ubuntu bash

動的に変更されるファイルのリストを繰り返す方法 - Ubuntu bash

私はこの機能を持っています:

function vacatetmp () {
    echo "Vacating TMP folder ${1}...."
    for i in "$1"/*; do
        if [ -f "$i" ]; then
            caseit "$i"
          elif [ -d "$i" ]; then
               vacatetmp "$i"
        fi
    done
}

ターゲットフォルダ内のコンテンツが静的である場合は正常に動作します。つまり、関数が呼び出されてもファイルは変更されません。しかし、問題は、このコードの別の関数がとして参照され、ターゲットcaseitフォルダに新しいファイルを追加して実際に追加することです。ターゲットフォルダのリストは"$1"/*呼び出し時にリストされた配列なので、生成された新しいファイルは配列に追加されないため、関数内の再帰によって処理されません。誰もがこの問題を処理する方法を提案するのに役立ちますか?私はこの関数が関数によって追加された新しいファイルも処理したいと思います。forcaseitvacatetmpcaseit

わかりやすくするために、caseit関数は$i渡されたファイルのMIMEタイプを見つけて、ターゲットvacatetmpフォルダにファイルを抽出します"$1"。アーカイブには複数のディレクトリ階層を含めることができるため、ファイルがどれだけ深く作成されるかを知ることはできません。再帰関数の理由。

ベストアンサー1

まず、ファイルを繰り返し開き、ディレクトリを繰り返します。

for i in "$1/*"; do [[ -f "$i" ]] && caseit "$i"; done; 
for i in "$1/*"; do [[ -d "$i" ]] && vacatetmp "$i"; done

最後に内部で電話する方がvacatetmp()徹底します。caseit()しかし、これが必須であるかどうか疑わしく保守するのが難しいコードになります。

おすすめ記事