我正在嘗試比較兩個伺服器之間的命令輸出。我想從諸如 之類的命令的輸出中找出行數ls -l
。有辦法這樣做嗎?到目前為止我還沒有發現任何東西。
答案1
對某些人來說,這可能更容易記住:
ls -l | grep . -c
請注意 grep 和 wc 都會計算輔助行,例如total 32044
or 或./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