findコマンドを実行しましたが、進行状況レポートを取得する方法はありますか?

findコマンドを実行しましたが、進行状況レポートを取得する方法はありますか?

まず、Unixについての知識が不足していることをご了承ください。それが私がここにいる理由です。 Macでファイルを検索するAppleScriptを作成し、次のようにしてはるかに高速にしました。

set MySubfolderTextList to do shell script "find " & MyDirectory & " -type d"

一般的なUNIXではこうなるだろう。find MyDirectory -type d

これにより、名前付きフォルダの最上位レベルで繰り返し起動するすべてのサブフォルダのリストが表示されますMyDirectory。これで、通常のAppleScriptを使用して作成された以前のルーチンに比べて速度が驚くほどです。しかし、問題は、数千のサブディレクトリがあるフォルダでこのスクリプトを実行すると、数秒間小さなビーチボールが表示されることです。数時間または数分間、次のいずれかを示します。発生したか、システムがクラッシュしました。検索の進行状況についてUnixからフィードバックを受け取ることができたらと思います。そうしないと、プログラムがクラッシュし、クライアントがパニックになります。

ベストアンサー1

まさか。 findはディレクトリツリーに何があるのか​​わからず、代わりにすべてのディレクトリのリストを再帰的に読み取って見つけることを検討してください。 (恥ずかしくて申し訳ありません。)たとえば、2つの最初のレベルのディレクトリがあるとします。 1つは1つのファイル、もう1つは1,000,000ファイルです。

プログラムは最初にツリーを検索してすべてのファイルの数とサイズを見つけ、それを使用して完了を推定できるため、ツリーのコピーなどの操作は異なります。これはファイルサイズが明示的に保存されるため、サイズを見つけるためにファイル全体を読み取る必要がないために行うことができます。しかし、私が知っている限り、一般的なファイルシステムはツリー内のファイル数に関する情報を保持しません。 (不可能というわけではありませんが、一部のシステムが可能な場合でも、その情報を使用するにはfindを変更する必要があります。)

さて、ビーチボールの感じと凍りついた感じについては、実行中にUIがブロックされるようにサブプロセスを同期的に実行しますか?これは一般的に悪い考えであり、「まだ検索しています...」という素晴らしいメッセージを表示しながら、バックグラウンドで外部プログラムを実行する方法を探したいかもしれません。ユーザーが忍耐強くない場合は、検索を中止することを選択できます。

おすすめ記事