バッチモードで実行されるBashの「for」範囲で「検索」出力

バッチモードで実行されるBashの「for」範囲で「検索」出力

for以前のプロセスから取得した入力範囲を使用してLinux mintでBashコマンドを使用してループプロセスを実行しましたが、範囲を明示的に直接指定してターミナル出力を提供するために実行するのではなく、ターミナル出力に基づいてバッチfindで実行されます.見えますfind。私のもの。

IFS=$'\n'
for s in $(find ~+ -type f -regextype posix-extended -iregex ".*/data\.(tmp|bak)" -printf '%p\n')
    {
    echo $s
    }

出力なしで100秒間静止します。または一部を端末に直接表示する代わりに。find直接指示するのと同じくらい速く機能させるにはどうすればよいですか?よろしくお願いします。

答え1

ループforは1つを繰り返します。変化のない常にリストを作成します。したがって、繰り返す項目が完全に指定されるまで、質問のループ本文は実行を開始しません。findこれは、コマンドの実行が完了するまで完全には指定されません。

コマンドにはいくつかの問題があり、ほとんどは質問で「解決」できます。検索結果を繰り返すのはなぜ悪い習慣ですか?」。

find通常、内部スクリプトのパス名ジェネレータとして機能することをお勧めします。

find ~+ -type f \( -iname data.tmp -o -iname data.bak \) -exec sh -c '
    for pathname do
        # process "$pathname" here
    done' sh {} +

findこれにより、ループに指定されたパス名がどのように区別されるかを気にする必要がなくなります(これにより、スペースや改行などを含むパス名が正常に処理されます)。

関連:

関連情報