2013-10-21 33 views
0

我有這個命令Unix的ls命令循環性能

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

人數0..1000僅用於測試,但它可以從0到67864例如...此命令工作,但顯然這是慢下來......有沒有更好的方式在更短的時間內執行此操作?大約需要6秒鐘來列出我編輯的1000循環 以獲取更多信息。

我想要的是檢索n該命令,並將該行插入到一個數組(我正在使用java),因此每行將有"foo" => commandoutput" 它必須返回是每個文件的第五(第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|cutls命令是緩慢的,因爲有噸的循環......那麼什麼我想要一個更快的方式來獲得第五(第五)列,其中ls -Falh顯示文件大小...

+14

我投票解釋你想達到什麼目的,而不是破譯管道。 – Birei

+0

看起來像她想在'/ foo /'的文件中grep多個模式'bar。{0..791}',然後顯示第五個字段(由若干空格分隔的字段)。 –

+0

我們是否需要每次都打電話給ls?排序重要嗎? – Basilevs

回答

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

查找打印文件名和大小是千字節,切除文件名的非數字部分,對數值部分進行排序,awk進行數字分析和打印大小。

看來你不需要排序,所以你可以從管道中刪除排序。

+0

這個命令能輸出MB/GB/TB的文件大小嗎?因爲我正在處理大小爲+ 10TB的文件 –

+0

查找不到,但awk可以以任何您喜歡的方式處理$ 2數字。 – Basilevs