
フォルダの下のファイル数を数え、次のコマンドを使用する必要があります。
cd testfolder
bash-4.1$ ls | wc -l
6
実際、このフォルダには5つのファイルしかありません。
bash-4.1$ ls
total 44
-rw-r--r-- 1 comp 11595 Sep 4 22:51 30.xls.txt
-rw-r--r-- 1 comp 14492 Sep 4 22:51 A.pdf.txt
-rw-r--r-- 1 comp 8160 Sep 4 22:51 comparison.docx.txt
-rw-r--r-- 1 comp 903 Sep 4 22:51 Survey.pdf.txt
-rw-r--r-- 1 comp 1206 Sep 4 22:51 Steam Table.xls.txt
それはファイルls | wc -l
と見なされているようですが、これは間違っています。total 44
答え1
上記の内容に関する追加情報は次のとおりです。
出力を処理するには、find
結果を他のアプリケーションにパイプするのに適したいくつかのフューチャーがある代わりに使用する必要があります。ls
-print0
上記の場合は、このように使用できます。
find . -type f | wc -l
これにはすべての項目がリストされます。文書現在のディレクトリに。
答え2
この場合を含むwc -l
コマンド出力の行数が返されるため、機能しません。シェルにエイリアスがあるため、出力を混乱させる追加情報が得られます。ls
total 44
ls
ls -cml
代わりにコマンドを使用してください"ls" -Aq | wc -l
。 -Aコマンドは、ドットファイルを含むディレクトリ内のすべてのファイルを一覧表示しますが、.
除外します..
。ここでの参照は重要です。エイリアスを無視して直接/bin/ls
実行されます。
-q
ファイル名に改行文字が含まれていても、ファイル名が1行にのみ印刷されるようにします(レンダリングされます?
)。
答え3
wc
ファイルカウンタではなく、文字、単語、行カウンタです。
必要な結果を計算し、それに応じて計算を調整することは、プログラマー/スクリプターとしての責任です。
あなたの場合は、次のようにすることができます。
echo $((`ls|wc -l`-1))
最後に、ls
引数なしで正常でない非常に長いリストを提供するので、エイリアスを指定できますls
。したがって、混乱を避けるためにls
(通常は)フルパスを参照することをお勧めします。/bin/ls
答え4
bash-4.1$ ls
1. total 44
2. -rw-r--r-- 1 comp 11595 Sep 4 22:51 30.xls.txt
3. -rw-r--r-- 1 comp 14492 Sep 4 22:51 A.pdf.txt
4. -rw-r--r-- 1 comp 8160 Sep 4 22:51 comparison.docx.txt
5. -rw-r--r-- 1 comp 903 Sep 4 22:51 Survey.pdf.txt
6. -rw-r--r-- 1 comp 1206 Sep 4 22:51 Steam Table.xls.txt
はい、出力には6行があります。以下を使用できます。ls -1
単一列形式に対応し、次のようになります。
ls -1
Desktop
Documents
Downloads
Music
Pictures
Public
Templates
Videos
これでwc -l
正しい数のファイルを返します。
ls -1 | wc -l
8