スクリプト中断処理

スクリプト中断処理

120,000から500,000を超えるファイルを繰り返す必要があります。findとてもよく処理されました。

find $PWD -type f -path "fragments/*.pdbqt"

何らかの理由で同じファイルセットを同じ順序で再リストしたいと思います。リストが英数字でソートされているか、fstat電話番号などでソートされているかは関係ありません。続行する前に出力全体を知る必要があるため、スクリプトの実行が遅くなるため、使用はsortオプションではありません。findこれを行う方法を知っていますか?

直す。 私の問題を正しく説明できませんでした。私のスクリプトがそのように大量のファイルを処理すると、マイナーな中断が発生し、UPSがダウンする可能性があります。私のスクリプトは中断された部分から続行する必要があります。残りのファイルはどのように処理しますか?

答え1

検索出力をファイルに保存し、スクリプトがそのファイルを処理するファイルのリストとして使用するようにします。スクリプトがファイルを処理したら、ファイル名を別のファイルに書き込むようにします。スクリプトが中断された場合、grepスクリプトの再起動時に処理されたファイルを除外するのは簡単です。例:

touch files_already_processed
while IFS= read -r file
do
    # skip file if already processed
    grep -q -e "$file" files_already_processed && continue
    # process the file
    # processing code goes here
    echo "$file" >> files_already_processed
done <files_to_process

答え2

このfindコマンドは、ディレクトリ順にファイルを返します。ディレクトリの順序が不安定です。一部のファイルシステムでは、ファイルを追加または削除すると、同じディレクトリ内の他のファイルの順序に影響を与える可能性があります。

ソートはオプションではないというあなたの声明に疑問があります。各ファイルを非常に迅速に処理しない限り、ファイルリストの作成は非常に高速です。操作が中断された場合は、再利用できるようにファイルに保存してください。

何があってもどこで止まり、そこから続けるべきかを知る必要があります。途中でいくつかの複雑な列挙を復元するよりも、すでに生成されたファイルのリストから復元する方が簡単です。

関連情報