2014-11-06 74 views
-1

所以我想要做的是找到大的ASCII文件,然後打印出文件的名稱,然後打印多少行,但是當我啓動我的腳本時,它不會找不到任何東西。Bash腳本試圖找到大的ASCII文件時不工作

find/-type f -size +2000c -exec file {} \; 2>/dev/null | awk -F':' '/: ASCII text/ {print $1}' | while read FILENAME; do LINES="$(wc -l)"; if [ $LINES > 10000 ]; then echo $FILENAME && echo $LINES; fi; done

+1

'LINES =「$(wc -l)」'不會讀取'「$ FILENAME」''。 – 2014-11-06 20:50:43

回答

0

你有什麼錯?

if [ $LINES > 10000 ]這裏>用於字符串比較。要使用數字小水平的研究-gt必須作爲

if [ $LINES -gt 10000 ]

+0

即使在改變之後,它仍然沒有找到任何東西。 – the1osu 2014-11-06 19:04:41

+0

爲什麼不用'wc'來代替? – nu11p01n73R 2014-11-06 19:06:36

+0

'if [$ LINES> 10000];那麼...'會很高興地留下一個名爲'10000'的空文件當前目錄,因爲'>'不用於字符串比較,而是用於重定向。 – 2014-11-06 21:09:47

0

請試試這個:

find/-type f -size +2000c -print0 | xargs.exe -0 grep -Z -L -e '[^[:print:]]' 2>/dev/null | xargs -0 awk 'ENDFILE { if (FNR > 10000) { print FILENAME " " FNR } }' 

這樣做是爲了過濾掉二進制文件與的grep和飼料AWK與列表的過濾文件,最後過濾掉行數小於或等於10000的文件。

btw,它處理fi與優雅的白色空間的名字。