現在、ディレクトリ(サブディレクトリを除く)のファイル数を数えるスクリプトを探しています。各ファイルを繰り返し、ディレクトリでない場合は、数を増やす必要があります。出力はファイル数を表す整数でなければなりません。
私はそれを知っています
find . -type f | wc -l
しかし、私はそれが全体の計算タスクを実行するとは思わない。これは課題なので、正しい方向を教えてほしいと思うといいでしょう。
ベストアンサー1
一般的なファイルだけが必要な場合は、
GNUの使用find
:
find . -maxdepth 1 -type f -printf . | wc -c
その他find
:
find . ! -name . -prune -type f -print | grep -c /
-print | wc -l
(ファイル名に改行文字が含まれていると機能しないため、これは望ましくありません。)
そしてzsh
:
files=(*(ND.)); echo $#files
そしてls
:
ls -Anq | grep -c '^-'
一般ファイルへのシンボリックリンクを含めるには、with GNU、with other、またはwith-type f
に変更するか、オプションをに追加します。しかし、得ることができることに注意してください。-xtype f
find
-exec test -f {} \;
find
.
-.
zsh
-L
ls
偽の否定シンボリックリンクのターゲットタイプを決定できない状況(アクセス権のないディレクトリにあるため)。
通常のファイルだけでなく、あらゆる種類のファイル(シンボルリンク、ディレクトリ、パイプ、デバイス...)が必要な場合:
find . ! -name . -prune -printf . | wc -c
-print | grep -c /
(with non-GNU find
、(ND.)
with (ND)
、zsh
withgrep -c '^-'
に変更されましたwc -l
)ls
。
しかし、に変更しない限り、これは重要ではありません。.
または..
(通常、人々はいつもそこにいるので実際には気にしません)。-A
-a
ls
ディレクトリを除くすべての種類のファイルが必要な場合は、次に置き換える(またはディレクトリへのシンボリックリンクも除く)に置き換え、に置き換え-type f
、に置き換えます。! -type d
! -xtype d
zsh
.
^/
ls
grep -c '^-'
grep -vc '^d'
隠しファイル! -name '.*'
をzsh
除外するには。D
ls
A