2 つのサーバー間でコマンド出力を比較しようとしています。 などのコマンドの出力から行数を調べたいのですが、ls -l
その方法はありますか? 今のところ何も見つかっていません。
答え1
誰かにとっては、これが覚えやすいかもしれません:
ls -l | grep . -c
total 32044
grep と wc はどちらも、またはまたはなどの補助行をカウントすることに注意してください./dirname:
。特に再帰出力でこれを回避するには、ls -lR
次を試してください。
find . -type f | grep . -c
ここで、 first.
はディレクトリ パスであり、ファイルのみをリストする-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
これは、必要に応じてシェル グロブを使用して、現在のディレクトリの下を含むすべてのファイル (ディレクトリではありません) を 1 行に 1 つずつ再帰的にリストします。印刷できない文字を置き換えます。grep
親ディレクトリのリストや空白行は除外されるため、ファイルごとに 1 行のみになり、その合計数が返されます。子ディレクトリも含める場合は、次のようにします。..
*/
grep
ls -aR1qp ./ | grep -cv '^\.\{1,2\}/\|^$'
または...
ls -AR1q ./ | grep -cv '/\|^$'
最新バージョンでは、-A
オプションはPOSIX であることに注意してください。ls