0

私はこのコマンドを持っています

for i in {0..1000}; do ls -Falh /foo/ | grep bar.$i | tr -s " " | cut -d " " -f 5

数値0..1000はテスト用ですが、たとえば 0 から 67864 まで可能です... このコマンドは機能していますが、明らかに非常に遅いです... このアクションを短時間で実行するためのより良い方法はありますか? 詳細については、私が編集した 1000 ループを一覧表示するのに約 6 秒かかります。

私が欲しいのは、そのコマンドを取得し、その行を配列に挿入することです(私はJavaを使用しています)。したがって、各行に"foo" => commandoutput" は、返される各ファイルの5番目(5番目)の列が返される必要があります...例

4,0K
4,0K
933
1,2K
6
2,2K
428
428
428
428
428
428
428
2,2K
6
2,2K
4,0K
4,0K
109K
0
0

問題は出力ではなく、実際には実行するawk '{print $5}'代わりに使用することtr|cutができましたlsが、ループがたくさんあるためコマンドが遅いです...したがって、私が望むのは、5番目(5番目)の列をls -Falh表示するより高速な方法ですファイルサイズ...

4

1 に答える 1

2
find /tmp/ -maxdepth 1 -name bar.\* -printf "%f %k\\n" | cut -d . -f 2|sort -n | awk '$1 > 0 && $1 < 791 { print $2 }'

Find はファイル名を出力し、サイズはキロバイトです。cut はファイル名の数値以外の部分を削除し、sort は数値部分を並べ替えます。awk は数値分析を行い、サイズを出力します。

並べ替えは必要ないようですので、パイプから並べ替えを削除するだけです。

于 2013-10-21T14:46:13.237 に答える