排除 .和 .. 来自 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)

为了避免在没有文件时出现错误消息,请添加Nglobbing 限定符:

count *(ND)

如果没有匹配,这会导致 glob 扩展为空(没有参数,不是空参数)。

请注意,由于换行符与文件名中的任何字符一样有效,因此管道输出lsfindtowc -l是不正确的。

POSIXly,你可以计算/字符而不是换行符:

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
...

相关内容