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
コマンドは、ディレクトリ順にファイルを返します。ディレクトリの順序が不安定です。一部のファイルシステムでは、ファイルを追加または削除すると、同じディレクトリ内の他のファイルの順序に影響を与える可能性があります。
ソートはオプションではないというあなたの声明に疑問があります。各ファイルを非常に迅速に処理しない限り、ファイルリストの作成は非常に高速です。操作が中断された場合は、再利用できるようにファイルに保存してください。
何があってもどこで止まり、そこから続けるべきかを知る必要があります。途中でいくつかの複雑な列挙を復元するよりも、すでに生成されたファイルのリストから復元する方が簡単です。