有沒有辦法從命令輸出找出行數?

有沒有辦法從命令輸出找出行數?

我正在嘗試比較兩個伺服器之間的命令輸出。我想從諸如 之類的命令的輸出中找出行數ls -l。有辦法這樣做嗎?到目前為止我還沒有發現任何東西。

答案1

對某些人來說,這可能更容易記住:

ls -l | grep . -c

請注意 grep 和 wc 都會計算輔助行,例如total 32044or 或./dirname:。為了避免這種情況,特別是在遞歸輸出中,請ls -lR嘗試以下操作:

find . -type f | grep . -c

其中第一個.是目錄路徑,-type f意味著find僅列出檔案。如果您需要所有類型(包括目錄、套接字等),則只需省略 -type f.

請注意:wc -l會計算空白行(僅“\n”),而grep . -c- 則不會。

答案2

你應該使用wc

$ wc -l .emacs.d/init.el 
73 .emacs.d/init.el

man wc

NAME
       wc - print newline, word, and byte counts for each file

SYNOPSIS
       wc [OPTION]... [FILE]...
       wc [OPTION]... --files0-from=F
       ....
       -l, --lines
              print the newline counts

wc是 的一部分GNU coreutils,您可以在大多數系統中擁有它Unix-like

答案3

你可以透過管道將你的命令傳遞給wc命令:

ls -l | wc -l

答案4

如果您想比較任一伺服器處理的檔案數量,那麼您可以可靠地執行此操作,如下所示:

ls -aR1qp ./ | grep -cv '/\|^$'

這會遞歸地列出所有文件(而不是目錄),每行一個,包括.dotfiles當前目錄下的文件,根據需要使用 shell glob 來替換不可列印的字元。grep過濾掉任何父目錄清單或..空白*/行 - 因此每個檔案應該只有一行 -grep傳回給您的總計數。如果您也希望包含子目錄,請執行以下操作:

ls -aR1qp ./ | grep -cv '^\.\{1,2\}/\|^$'

或者...

ls -AR1q ./ | grep -cv '/\|^$'

請注意,最新版本中的-A選項是 POSIX。ls

相關內容