私はこの機能を持っています:
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"/*
呼び出し時にリストされた配列なので、生成された新しいファイルは配列に追加されないため、関数内の再帰によって処理されません。誰もがこの問題を処理する方法を提案するのに役立ちますか?私はこの関数が関数によって追加された新しいファイルも処理したいと思います。for
caseit
vacatetmp
caseit
わかりやすくするために、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()
しかし、これが必須であるかどうか疑わしく保守するのが難しいコードになります。