有什么办法可以防止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)
(zsh
glob 永远不会包含.
,甚至在启用..
时也不会包含(例如使用globbing 限定符))。dotglob
(D)
为了避免在没有文件时出现错误消息,请添加N
globbing 限定符:
count *(ND)
如果没有匹配,这会导致 glob 扩展为空(没有参数,不是空参数)。
请注意,由于换行符与文件名中的任何字符一样有效,因此管道输出ls
或find
towc -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
...