find と ls の結果から . と .. を除外する

find と ls の結果から . と .. を除外する

findおよびが結果におよびls -lをリストしないようにする方法はありますか? 出力にこの結果が表示されることは気にしていません。また、出力を に効果的にパイプして、正確にカウントすることもできなくなります。...wc -l

念のため言っておきますが、私は で働いていますzsh

答え1

の場合ls-Aの代わりにを使用します-a

からman ls

   -A, --almost-all
          do not list implied . and ..

答え2

zsh

count() echo $#
count *        # non-hidden files (all types)
count *(D)     # files (all types)
count **/*(D)  # files recursively (all types)
count **/*(D/)  # directories only (recursively)

( zshglob には、が有効になっている場合でも(globbing 修飾子の場合など) は含まれませ.ん)。..dotglob(D)

ファイルがない場合にエラー メッセージが表示されないようにするには、Nグロブ修飾子を追加します。

count *(ND)

これにより、一致しない場合は、glob は何も展開されません (引数なし、空の引数ではない)。

改行文字はファイル名内の他の文字と同様に有効な文字であるため、lsまたはの出力をパイプすることfindwc -l正しくないことに注意してください。

/POSIX では、改行文字の代わりに文字をカウントできます。

find . ! -name . -prune -print | grep -c /

または、次のトリックを使用して再帰的に実行します。

find .//. ! -name . -prune -print | grep -c //

答え3

findドット ディレクトリを除外するには、次のようにします。

$ find . ! -path . -type d

$ find . ! -path . -type d | head -5
./.vim_SO
./.vim_SO/bundle
./.vim_SO/bundle/vim-fugitive
./.vim_SO/bundle/vim-fugitive/plugin
./.vim_SO/bundle/vim-fugitive/doc
...

関連情報