2015-10-27 14 views
3

我有一個文件目錄,我想找到超過2行的文件列表。Bash - 找到超過3行的文件列表

我知道我可以使用wc -l來測試每個文件,但是如何將它包裝在bash中?

對不起新手問題,新手bash。

+3

只是提示,「find/tmp/-type f -exec wc -l { } +「 – Noproblem

+0

你想要超過3行(正如你的標題所示)或超過2行(如你問題的主體所示)? –

回答

4

您可以使用此find命令:

find . -type f -exec bash -c '[[ $(wc -l < "$1") -gt 2 ]] && echo "$1"' _ '{}' \; 
0

更改到目錄,文件所在的位置,並使用以下命令:

for i in $(ls); 
do 
    if [ `grep -c '' $i` -gt 2 ]; then 
     echo `wc -l $i`; 
    fi; 
done 

這個工作,當然,也可以作爲1行的聲明;)

此行迭代每個文件並使用grep來獲取純行數。 wc -l也可以得到計數,但是結果包括文件名......我不知道,如果您可以使用該值進行比較,但是這並不重要:如果行數大於2 (-gt 2),然後wc -l $我會輸出行數和文件名。如果您只想查看文件名,則用$ i替換wc -l $i

當然,我沒有檢查,如果每個條目是一個文件。你可以在檢查行數之前做到這一點。

更新:雖然不建議使用ls進行解析,但仍可以使用它。你只需提前檢查你的文件名不包含換行符(或其他奇數)的符號。

+1

[請勿解析'ls'](http://mywiki.wooledge.org/ParsingLs),請! –

+0

呃,我不知道那個......但是我必須說:如果有人給這些名字的文件,這只是他/她自己的錯。換行符不屬於文件名Oo 如果線程創建者必須處理其他人產生的這種「狗屎」,那麼我爲他/她感到難過。 @gniourf_gniourf謝謝你的提示,我沒有意識到這一點。但至少你可以通過使用ls -l' – Acuros

+0

來檢查是否有邪惡的跡象它不僅僅是關於文件名中的換行符,它還是關於空格和glob字符!例如,如果還有一個名爲'videos.mp3'的文件,則代碼會失敗,出現名爲'hello world'的文件或名爲'video [season1] .mp3'的文件。現在有三件事情:1.你正在使用_antipattern_:也就是說,你從一開始就做錯了一件事,解決它的唯一方法就是與shell進行對抗(例如,使用'set -f'和'IFS = $'\ n'',但這仍然會失敗,包含換行符的文件名)。治癒的方法是使用glob:'for in in *; do' ... –

0

使用xargsawk

$ find . -type f | xargs wc -l | awk '$1 > 2' 

如果你是個混蛋repositiory,並希望只跟蹤文件來算,你可以使用下面的命令:

$ git ls-files | xargs wc -l | awk '$1 > 2' 
相關問題