我還需要目錄名稱作爲輸出。我能做的就是輸出所有目錄中具有目錄名稱的總行數。如何統計文件的所有行
find . -name '*.c' | xargs wc -l | xargs -I{} dirname {} | xargs -I{} dirname {}
我還需要目錄名稱作爲輸出。我能做的就是輸出所有目錄中具有目錄名稱的總行數。如何統計文件的所有行
find . -name '*.c' | xargs wc -l | xargs -I{} dirname {} | xargs -I{} dirname {}
我已經混亂了bash
命令的混合物大多GNU
特異性,請確保您有他們,GNU grep
和GNU Awk
find . -type f -print0 | xargs -0 grep -c ';$' | \
awk -F":" '$NF>0{cmd="dirname "$1; while ((cmd | getline result) > 0) {printf "%s\t%s\n",result,$2} close(cmd) }'
的想法是grep -c
返回格式,file-name:count
模式計數,對此我將它傳遞給GNU Awk
以過濾那些計數大於零的文件,並打印包含它的文件的目錄和計數本身。
由於他們稱之爲這幾天看上一個內膽,
find . -type f -print0 | xargs -0 grep -c ';$' | awk -F":" '$NF>0{cmd="dirname "$1; while ((cmd | getline result) > 0) {printf "%s\t%s\n",result,$2} close(cmd) }'
做這份工作!感謝您的解釋。 – Theseven7
這裏是一個腳本:
#!/usr/bin/env bash
for dir in */; do (
cd "$dir"
count=$(find . -name '*.c' -print0 | xargs -0 grep '[;]$' | wc -l)
echo -e "${count}\t${dir}"
) done
如果你想爲每個子目錄編號:使用
#!/usr/bin/env bash
for dir in $(find . -type d); do (
cd "$dir"
count=$(find . -maxdepth 1 -name '*.c' -print0 | \
xargs -0 grep '[;]$' | wc -l)
echo -e "${count}\t${dir}"
) done
-maxdepth 1
確保計算僅在當前目錄下完成的,而不是其子目錄。所以每個文件都被計算一次。
有沒有辦法修改循環來查看子目錄呢? – Theseven7
增加了另一個腳本。 –
你能有一個適當的例子再次重申您的要求?你能詳細解釋一下嗎? – Inian
@Inian,基本上我想擁有目錄路徑和該目錄中以分號結尾的行數(該目錄中所有文件的行數)。我可以用'find'輸出在目錄中以分號結尾的行的總數。 -name'* .c'-print0 | xargs -0 grep'[;] $'| wc -l',但我不知道如何通過目錄獲取輸出。 – Theseven7
@Inian,做到了。 – Theseven7