簡単な質問ですが、どこを見るべきかわかりません。 Google はピリオドやスラッシュには応答しません。
現在のディレクトリ(サブフォルダ/ファイルを除く)にあるファイルとディレクトリの数を数えて同じように見えるls -1 | wc -l
ので、それらを区別しようとしています。ls | wc -l
私が見たウェブサイトはこう言った。「ここには./と../ディレクトリも含まれていることを覚えておいてください。」に関しては、ls -1
それが以前のディレクトリや(私が望んでいない)ものを含むことを意味するかどうかはわかりませんが、テストを通してそれをしないようです。
現在のディレクトリ(サブディレクトリではない)にあるファイルとディレクトリの数だけを計算するのに最適なものは何ですか?
ベストアンサー1
Unixシステム(およびおそらく他のすべてのシステム)のすべてのディレクトリには、少なくとも2つのディレクトリエントリが含まれています。.
(現在のディレクトリ)と..
(親ディレクトリ)です。ルートディレクトリの場合は同じ場所を指しますが、他のディレクトリの場合は異なります。 Linuxではstat
、およびコマンドを使用してpwd
直接確認できます。cd
$ cd /
$ stat . .. bin sbin | grep Inode
Device: 802h/2050d Inode: 2 Links: 27
Device: 802h/2050d Inode: 2 Links: 27
Device: 802h/2050d Inode: 548865 Links: 2
Device: 802h/2050d Inode: 2670593 Links: 2
$ pwd
/
$ cd ..
$ pwd
/
$
bin
各リンクにはsbin
2つのリンクがあります。 1つはルートディレクトリのディレクトリエントリ、もう1つは.
そのディレクトリ内のエントリです。
ls
パイプを使用することは、wc -l
ls出力の行数を計算する簡単な方法です。各ファイルまたはディレクトリは、出力で正確に1行を占めると仮定します。 GNU lsは、出力が非ターミナルのときに自動的にこれを行います。他の人は-1
この動作のオプションを明示的にオンにする必要があるかもしれません。入力()のwc -l
行数を計算して出力します。-l
このアプローチの問題は、LinuxとLinuxで伝統的に使用されているファイルシステムでは、ファイル名とディレクトリ名(この場合は実際には1つで同じ)が次のようになることです。改行文字を許可。どちらの方法も、これらの項目がある場合は機能しません。項目は実際には1つですが、複数の項目として計算されます。
ls
GNU lsを使用する限り、名前に新しい行を含むディレクトリエントリがなく、奇妙なエイリアス(たとえば)もなく、両方とも現在ls -a
(または指定された)ディレクトリにあるファイルとディレクトリの数を出力します。ほとんどの人にとってこれは十分ですが、実際には機能しません。一般的なケース。
ディレクトリエントリ名で異常な文字(主に改行)を正しく処理する必要がある場合は、-b
lsオプションを使用してエスケープすることをお勧めします。ls -1bA
各ディレクトリエントリ名は、ドットファイルやディレクトリを含む珍しい文字をエスケープして独自の行に印刷されます(したがって、各ディレクトリエントリは1つとして扱われます)。現在のディレクトリにあるファイルとディレクトリの数を報告するwc -l
完全なコマンドラインを追加します(およびは無視します。これとは違いです)、サブディレクトリには含まれません。ポイントファイルが合計に含まれたくない場合は、引数を省略してください。ls -1bA | wc -l
.
..
-a
-A
-A
ls