find -exec パフォーマンスの向上

find -exec パフォーマンスの向上

Javaプログラムに渡すには、ディレクトリ内のサブディレクトリ(ファイルではない)のリストが必要です。だから私はこのコマンドを使ってLinuxボックスのリストを取得します。

find /some_directory -depth -maxdepth 1 -mindepth 1 -exec basename {} \; > listfile.txt

その後、listfile.txtそれをJavaプログラムにパラメータとして渡します。 Javaプログラム自体からリストディレクトリを取得する際にいくつかの問題があるので、そうします。ただし、ファイル数が200,000を超えるため、上記のコマンドfindには多くの時間(約35分)かかります。

最適化できますか?それとも、より良いオプションがありますか?

ベストアンサー1

GNU1を使用してパスではなくファイル名のみを印刷するには、次のように.explainedにfind置き換えることができます。-exec basename-printf '%f\n'牛に似た一種の栄養findマニュアルページ:

%F

すべての先行ディレクトリファイル名を削除します(最後の要素のみ)。

また、内部ディレクトリのみを出力するには、次の-type dオプションを使用する必要があります。

find /some_directory -maxdepth 1 -mindepth 1 -type d -printf '%f\n' > listfile.txt

-depth深さ(1)のファイルだけを探しているので重複します。

-maxdepthGNU 拡張でもありますが、-mindepth逆に-printf他のいくつかのfind実装にも表示されます。

おすすめ記事