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)のファイルだけを探しているので重複します。
-maxdepth
GNU 拡張でもありますが、-mindepth
逆に-printf
他のいくつかのfind
実装にも表示されます。
答え2
sum 以外のディレクトリに項目のリストを 1.
行に 1 つずつ保存する場合、このコマンドとそのオプションの目的は次のとおりです。..
/some_directory
ls
-A
ls -A /some_directory > listfile.txt
これはリストをソートする利点もあります(GNUを使用するとls
ソートを無効にするために使用できます-U
)。
basename
あなたの場合、ファイルごとに1つのコマンドを実行するので、これは非常に非効率的です。